git 直接merge fast-forward和--no-ff和--squash的區別——圖文解釋


git merge

merge 默認是fast-forward方式來merge,不會顯示 feature,只保留單條分支記錄。git直接把HEAD指針指向合並分支的頭,完成合並。屬於“快進方式”,不過這種情況如果刪除分支,則會丟失分支信息。因為在這個過程中沒有創建commit。

git merge --no-ff

--no-ff指的是強行關閉fast-forward方式。可以保存之前的分支歷史。能夠更好的查看 merge歷史,以及branch 狀態

git merge --squash

git merge --squash 是用來把一些不必要commit進行壓縮,比如說,你的feature在開發的時候寫的commit很亂,那么我們合並的時候不希望把這些歷史commit帶過來,於是使用--squash進行合並,此時文件已經同合並后一樣了,但不移動HEAD,不提交。需要進行一次額外的commit來“總結”一下,然后完成最終的合並。
開發分支的git log:

使用git merge --squash將開發分支合到master后會新編輯一條git comment來總結這幾次提交記錄,一下為所有分支的git log:

master分支的git log:

總結:
--no-ff:不使用fast-forward方式合並,保留分支的commit歷史
--squash:使用squash方式合並,把多次分支commit歷史壓縮為一次

參考博文:https://segmentfault.com/q/1010000002477106


免責聲明!

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



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