git rebase 合並歷史提交的多個分支


今天因為在自己分支上提交了多個commits,合入master時被cr的同事叼了一頓:一個功能模塊不要提交太多commits,導致master主線混亂。所以研究了一下如何合並多個歷史提交的commits。

根據關鍵字搜了一下找到幾篇文章,都將答案指向了git rebase -i 命令,接下來在測試的分支上實踐一番:

1.git log 查看提交歷史

可以看到有三次歷史記錄,分別是"a", "b", "c"

2.git rebase -i (from, to]

from和to分別是commits的hash值,即從from commit到to commit之間的commits(不包含from)都將被合並。這里我們要合並a->c之間的3個提交,那么輸入:

git rebase -i 5c400f38b9d64c73fd173749c483433b471e64f8 ba5bb072f43de6e5e227861a9862e8793af6eaa5

可以看到提示:

p, pick <提交> = 使用提交
r, reword <提交> = 使用提交,但修改提交說明
e, edit <提交> = 使用提交,進入 shell 以便進行提交修補
s, squash <提交> = 使用提交,但融合到前一個提交
f, fixup <提交> = 類似於 "squash",但丟棄提交說明日志
x, exec <命令> = 使用 shell 運行命令(此行剩余部分)
b, break = 在此處停止(使用 'git rebase --continue' 繼續變基)
d, drop <提交> = 刪除提交
l, label

這里我們主要使用"pick"和"squash"來分別選擇保留和丟棄提交日志。

然后保存vim后彈出下一個編輯框:

編輯合並的提交日志:

保存后,再次查看git log:

可以看到三次commits已經合並完成。

3.合並到原分支

因為rebase 后在一個臨時分支上,可以直接push -f 推到遠端。

`
git push -f origin xx

`

即可覆蓋遠端的歷史commits。


免責聲明!

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



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