讓你提高工作效率的Git的技巧
Git是一個非常強大的版本控制系統,但是Git異於常規以檔案為基礎的VCS系統架構,以及基於純命令列的功能涉及,使得初學者會難勘其妙,產生畏懼心裡。而如果長期依賴於Git圖形端的話,也難以真正理解Git的真正思維和功能。關於Git,蟲蟲已經發了很多文章,關注蟲蟲可以學習。今天蟲蟲就總結幾個可以極大改善你工作效率的Git技巧,希望能夠拋磚引玉,能對你Git學習和使用有一定的幫助。

Git別名
Git有很多命令,第一難於記憶。第二就算記得或者使用Git自動補全功能,但是敲打命令也比較費勁,影響效率。熟悉Linux的同學都應該使用過Shell強大的別名功能,幫你記憶和減少敲打命令的痛苦。同樣的該技巧也可以用到Git命令中來,可以對每天頻繁使用的命令建立別名,來幫我們提高效率。
例如,下面我們對最長使用的命令checkout,commit和branch建立別名(ck,cm,bc,也可為其他你喜歡的字元):
git config --global alias.ck checkout
git config --global alias.cm commit
git config --global alias.bc branch
此後,你只需鍵入git ck master,代替 git checkout master。
除了,通過上面命令設定全域性命令設定別名外,也支援通過直接修改使用者配置檔案~/.gitconfig檔案來達到同樣的效果:
[alias]
ck = checkout
cm = commit
bc = branch
暫儲未提交的更改
我們說git版本設計時候極大地考慮到了儲存你使用狀態,設計了三個區域來區分不同階段的變化,從變化由新到久順序依次是使用者工作區(working directory),暫存區(stage index)和歷史記錄區(history),在遠端庫以及和其他客戶端互動協作都是commit後git物件(git檔案資料庫);

對應三個區域的,git中的檔案有四種狀態,未跟蹤(Untracked),未修改,(Unmodified),已修改(Modified),已暫存 (Staged)。而最後通過commit進入歷史記錄區後,就沒有檔案了,都是git物件了,所以開頭我們說了Git不是以檔案為基礎的。只是在客戶端體現為檔案(工作區和暫存區)。

對於已經commit的git物件,可以任意交換、追蹤和撤回,那麼對本地工作區和暫存區檔案由於還沒有commit無法通過git追蹤和儲存。git也考慮這種需求,那就是我們要介紹第二個技巧stash功能,估計很多碼農一直在用。試想我們正在持續開發中,寫大了大量的功能,但是還沒有做單元測試,還不宜於提交commit。這是來了個緊急bug需要立即處理。這時候就是stach大顯伸手的時候了。
git stash
git stash會儲存了目前檔案變化狀態,迴歸到上一個commit後的乾淨的工作目錄。現在我們可以隨意切換到bug分支來進行修復問題。
修復完成後,希望再次顯示以前的工作狀態,只需執行下面命令:
git stash pop
這樣之前工作狀態就恢復了。你可以儲存多個stash工作狀態,通過list顯示其列表,也可以通過git stash drop如清除暫存的工作狀態。
commit對比
比較commit或同一檔案版本之間差異的簡單快捷方法是使用命令列。可以使用git diff命令。
如果要在不同commit(commit1和commitN)對比一個檔案的變化,命令是:
git diff commit1..commitN -- path/to/file

如果你想比較兩次commit之間的差異:
git diff commit1..commitN

該命令將開啟終端的diff檢視,但如果你喜歡使用更直觀的工具來比較差異,則可以使用git difftool。比如使用Meld編輯器。

首先配置difftoll配置,指向Meld:
git config --global diff.tool git-meld
檔案對比差異:
git difftool commit1..commitN -- path/to/file
和總體差異
git difftool commit1..commitN
Reset重置檔案
有時候,你修改了檔案後,發現修改的多餘了,想反悔,在git中反悔很容易你只需要reset即可。可以將所有檔案重置為分支的HEAD,不需要在編輯的內容上單擊撤銷:
git reset --hard HEAD
或者,撤銷單個檔案檔案,可以用:
git checkout HEAD -- path/to/file
如果已經提commit了變化,但仍希望還原,可以使用:
git reset --soft HEAD~1
使用Git blame提高效率
Git blame是個非常有用工具,可是很多人還沒有用到,那就開始使用把。blame操作,可以幫我們追蹤,某個檔案中所有內容的變化歷史。blame有很多有用的引數可以提高我們查詢的效率:
git blame -w #忽略空格
git blame -M #忽略挪移了的內容
git blame -C #忽略挪移到其他檔案中的內容
上面是一些git功能的使用技巧,蟲蟲在介紹幾個git工作流程方面的技巧,可供參考。
隨用隨pull
在Git工作流中,根據功能實現的時間長短,可能會對主分支進行了大量變化。為了避免發生較大的衝突,建議經常從主分支pull變化,這樣可以減少由於變化過大導致合併困難。
經常push,但不要每個commit都push
根據需要,通常會提交更改,使得變化歷史更簡潔,使其更容易還原。但是不建議並且沒必要將每個提交push到遠端倉,因為每一次push都會出現在action中,並且可能會向其他人傳送郵件通知。協調好你的commit和push是個成熟碼農應該具有的技能。一般建議按照做完一個完整(單元測試通過)功能點來push你的變化。