git rebase 合並提交記錄


    開發過程中,在一個開發分支上進行了多次提交,最后將所有修改合並回主干。如果使用merge方式合並,會將每次commit全部合並過去,這樣主干上會出現很多提交記錄。而我們期望的是,主干上只有一條諸如"解決xx問題"的記錄。這時,可以在開發分支上將多次提交合並為一次。

    在開發分支上執行 

1 > git rebase -i HEAD~6

    `HEAD~3`表示要合並最近的3次提交,`HEAD~6`表示要合並最近的6次提交。

    會產生一個臨時的 rebase 描述文件,並進入 vim 編輯器,我們需要編譯這個文件,告訴 git 要如何 rebase
    文件開頭每一行是對一次 commit rebase 描述,根據下方的提示修改各行描述信息。每行描述有三段,命令、commitIdcommitMessage
    其中主要的命令有如下幾個:

命令 提交(修改)內容 提交記錄 提交信息(commit message)
p 保留 保留 保留
s 保留 保留 不保留
f 保留 不保留 不保留
d 不保留 不保留 不保留

 

    pick 保留提交記錄,每出現一個 p,rebase完成之后,會有一行提交記錄。rebase不一定會把所有提交合並為一,而是出現幾個p,合並為幾個提交記錄。
    squash 會保留這次提交所作的修改,但不保留提交記錄,會把這次修改壓縮合並到上個提交,就是上面的pick記錄上,同時將本次commit message添加到上個提交的后邊。
    fixup squash 類似,會把這次修改壓縮合並到上個提交,但是不添加commit message
    drop 會徹底丟棄這次提交,就像從來沒有過這次提交一樣,rebase完成之后,這條提交記錄沒有了,它所做的修改也沒有了。

    例如,將描述文件修改為如下內容:

p ab730e5 cm1
s 5e8b46f cm2
f 9cc1a7a cm3
p 4852f69 cm4
d 5e0b320 cm5
s f07e97d cm6

 

    保存(<Esc>:wq)之后,會執行第一次壓縮合並,對應描述文件中的前三行,壓縮完成,再次進入vim編輯模式,修改新的commit message,默認信息為"cm1 <\n> cm2",保存之后,會執行下一次壓縮合並,修改提交信息,保存。
    rebase過程就完成了。


免責聲明!

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



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