Git 環境設定 小技巧

從書和網路上整理一下 Git 一些設定和小技巧,讓使用上更為順手,更省時間。

Git 設定

git config 有三個層級,設定優先權: local > global > system

錯字自動校正

常常打錯字可以開啟自動校正。

預設值為 0,會顯示 Did you mean this?

$ git lpg

git: 'lpg' is not a git command. See 'git --help'.

Did you mean this?
        log

設定一秒後校正,單位為 110

git config --global help.autocorrect 10
$ git lpg

WARNING: You called a Git command named 'lpg', which does not exist.
Continuing under the assumption that you meant 'log'
in 1.0 seconds automatically...
...

ctrl+c 可中斷校正

設定 push 預設值

避免將錯誤的分支 push 到遠端去

設定預設編輯器

git config --global core.editor [your-editor]

Git Alias

用來縮短打字的時間,或是定義有意義的名字使用多種參數指令化為新功能

移除別名用 --unset 參數 外部指令開頭要 + !

常用指令設為別名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.cm "commit -m"
git config --global alias.st status

git acm

相等於 git add -A + git commit -m

新增全部到索引並提交

git config --global alias.acm "!git add -A && git commit -m"

git log

更好閱讀的 git log

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"
git config --global alias.lg1 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
git config --global alias.lg2 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"
git config --global alias.lg "!git lg1"

git unstage

將檔案移除索引

git config --global alias.unstage "reset HEAD --"

git unstage myFile.txt 相等於 git reset HEAD myFile.txt

git undo

快速取消最近一次的提交

git config --global alias.undo "reset --soft HEAD~1"

git last

查看最近提交的內容

git config --global alias.last "log -1 HEAD"

git difflast

查看最近提交的內容差異

git config --global alias.difflast "diff --cached HEAD^"

git rebase 避免無謂的 merge

常常在合併遠端相同分支的時候,都會出現沒有必要的 merge,會造成線路變得複雜。

rebase 會修改原本的 hash id,要注意

比較

設定 local master 分支預設值為 git pull --rebase

git config branch.master.rebase true

設定 global 預設值為 git pull --rebase

git config --global pull.rebase true

更多相關設定How to make Git pull use rebase by default for all my repositories?


HEAD 符號參照

這裡有一個參考圖,可以看出之間的關係

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A

A =      = A^0
B = A^   = A^1     = A~1
C = A^2  = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2

學習資源

LearnGitBranching 以圖形化的方式學習 Git,可以清楚了解分支 HEAD之間的關係,左邊下command,右邊會有圖形呈現,是個不錯的學習網站。


My .gitconfig settings


Reference