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