不喜欢 merge 分叉,那就用 rebase 吧
閱讀本文大概需要 3 分鐘。
有些人不喜歡?merge,因為在?merge?之后,commit?歷史就會出現分叉,這種分叉再匯合的結構會讓有些人覺得混亂而難以管理。如果你不希望?commit?歷史出現分叉,可以用?rebase?來代替?merge。
rebase?,又是一個中國人看不懂的詞。這個詞的意思,你如果查一下的話:
哈?玩個 Git 就彎了?
其實這個翻譯還是比較準確的。rebase?的意思是,給你的?commit?序列重新設置基礎點(也就是父?commit)。展開來說就是,把你指定的?commit?以及它所在的?commit?串,以指定的目標?commit?為基礎,依次重新提交一次。例如下面這個?merge:
git merge branch1如果把?merge?換成?rebase,可以這樣操作:
git checkout branch1 git rebase master可以看出,通過?rebase,5?和?6?兩條?commit?把基礎點從?2?換成了?4?。通過這樣的方式,就讓本來分叉了的提交歷史重新回到了一條線。這種「重新設置基礎點」的操作,就是?rebase?的含義。
另外,在?rebase?之后,記得切回?master?再?merge?一下,把?master?移到最新的?commit:
git checkout master git merge branch1為什么要從?branch1?來?rebase,然后再切回?master?再?merge?一下這么麻煩,而不是直接在?master?上執行?rebase?
從圖中可以看出,rebase?后的?commit?雖然內容和?rebase?之前相同,但它們已經是不同的?commits?了。如果直接從?master?執行?rebase?的話,就會是下面這樣:
這就導致?master?上之前的兩個最新?commit?被剔除了。如果這兩個?commit?之前已經在中央倉庫存在,這就會導致沒法?push?了:
所以,為了避免和遠端倉庫發生沖突,一般不要從?master?向其他?branch?執行?rebase?操作。而如果是?master?以外的?branch?之間的?rebase(比如?branch1?和?branch2?之間),就不必這么多費一步,直接?rebase?就好。
總結一下,rebase?指令可以改變?commit?序列的基礎點。它的使用方式很簡單:
git rebase 目標基礎點需要說明的是,rebase?是站在需要被?rebase?的?commit?上進行操作,這點和?merge?是不同的。
總結
以上是生活随笔為你收集整理的不喜欢 merge 分叉,那就用 rebase 吧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET5.0 单文件发布打包操作深度剖
- 下一篇: 数据结构与算法专题——第九题 外排序