git merge之squash


看CM源碼時,發現歷史記錄里有很多squash,於是google了解了一下。

Git相對於CVS和SVN的一大好處就是merge非常方便,只要指出branch的名字就好了,如:

1
2
3
4
5
$ git merge another
$ git checkout another
# modify, commit, modify, commit ...
$ git checkout master
$ git merge another

但是,操作方便並不意味着這樣操作就是合理的,在某些情況下,我們應該優先選擇使用--squash選項,如下:

1
2
$ git merge --squash another
$ git commit -m "message here"

--squash 選項的含義是:本地文件內容與不使用該選項的合並結果相同,但是不提交、不移動HEAD,因此需要一條額外的commit命令。其效果相當於將another分支上的多個commit合並成一個,放在當前分支上,原來的commit歷史則沒有拿過來。

Note:

判斷是否使用--squash選項最根本的標准是,待合並分支上的歷史是否有意義。

如果在開發分支上提交非常隨意,甚至寫成微博體,那么一定要使用--squash選項。版本歷史記錄的應該是代碼的發展,而不是開發者在編碼時的活動。

只有在開發分支上每個commit都有其獨自存在的意義,並且能夠編譯通過的情況下(能夠通過測試就更完美了),才應該選擇缺省的合並方式來保留commit歷史。

這里是原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM