對git的rebase(變基)的理解

__Charming__發表於2019-11-07

其實git的官網對變基的解析挺詳細的了:地址

從原理上也能理解【變基】和【合併】有啥區別。

我的理解是,【變基】和【合併】都能解決一個問題,那就是合併程式碼。但是他們的區別是:在master的記錄上會有所不同。如下圖:(我是用sourceTree做的合併與變基的)

【合併】
在這裡插入圖片描述
【變基】
在這裡插入圖片描述
從上面那兩個圖可以看到,如果是【合併】的話,C4這一個記錄其實還是在experiment分支上的,也就是說master分支上並沒有C4的提交記錄。

但如果是【變基】,C4的記錄也會出現在master
在這裡插入圖片描述
而且在這分支關係圖上還可以看到,【變基】和【合併】對程式碼的處理的差異。

【合併】是以C2為基準點,把C3C4合併,並生成新的提交。

而【變基】是以C3為基準點,並且把分支上的變動(也就是C4這一次提交的變動)再在C3上重演一遍,所以master也能有C4的記錄了。

於是單純看master的提交記錄就可以知道
【合併】是沒有C4的提交記錄的
【變基】是C4的提交記錄的

應用場景就因人而異了,有些人喜歡知道分支的所有改動(所有提交),所以就會用【變基】,把分支的所有記錄移動到master上

但是我個人還是比較喜歡合併,因為我們都是按照功能進行分支開發的,所以我看到你合併了這個分支我就知道你完成了這個功能的開發,不需要知道你到底做了什麼東西。而當我真的要知道你提交了什麼改動了什麼,我直接切去你的開發分支不就好了嗎

以上當屬個人見解,當然【變基】還有很多妙用,不僅僅是修整歷史,將分支歷史併入主線。這麼簡單。

相關文章