1. 程式人生 > 其它 >Git命令之rebase合併分支

Git命令之rebase合併分支

零、使用場景

正常合併分支,我們一般都用git merge命令,這樣子會導致git的graph有交叉,而不是一條直線。

交叉是這樣子的(當三個人在master上拉出分支開發,然後在master上進行merge操作時)

為了開發清爽,保證沒有交叉點,這個時候可以使用git rebase命令來合併分支。

1、git rebase實現合併分支的步驟(舉例說明)

①在master分支上拉出一個branch4分支,拉出一個branch5分支,拉出一個branch6分支,進行測試。

②先直接在master上新增一個檔案,便於後續的觀察,新增完檔案後,使用git add 和git commit 以及git push推送到遠端master分支上。

③在branch4,branch5,branch6上依次新增新檔案,然後使用git add 和git commit 以及git push推送到遠端各自的分支上,這樣新增三次,每個branch上都有三次記錄,這樣的目的也是為了更直觀的觀察現象。

做完以上三步,可以看到的graph圖形是這樣子的。

④先用branch4來進行測試,使用rebase的方式合併到master分支上。

真正的rebase步驟(合併branch4分支到master分支)

step1:先切到branch4分支

git checkout branch4

step2:使用rebase命令把自己的commit資訊複製到master分支上

git rebase master

備註:執行了rebase master後使用git status時,會出現該資訊,告知你落後於branch4分支,讓你使用git pull合併遠端分支,此時忽略該資訊即可。

step3:切換到master分支

git checkout master

step4:在master上merge branch4分支

git merge branch4

step5:推到遠端master分支

git push

step6:檢視graph

備註:此時可以看到,已經合併了branch4上的commit資訊到master上了,且沒有交叉出現,大功告成。

⑤同樣的步驟,把branch5和branch6都合併到master上。

⑥檢視graph

備註:此時可以看到,已經合併了branch5和branch6上的commit資訊到master上了,且沒有交叉出現,大功告成。

⑦把branch4,branch5,branch6刪除後,再看看實際的graph效果(一條線,清爽

二、git rebase解決衝突

當使用rebase命令時,會出現衝突的情況,我們來模擬一下解決衝突的過程。

①在master分支上,新增一個檔案為master_file_for_rebase_test.txt檔案,檔案內容為AAA

②在master上checkout出一個分支branch_a

③在master上修改檔案master_file_for_rebase_test.txt,內容為BBB

④此時branch_a分支中master_file_for_rebase_test.txt檔案內容還依舊是AAA,我們來修改為CCC

⑤此時的graph是這樣子的

⑥這個時候在branch_a分支rebase master分支

git checkout branch_a
git rebase master

此時提示我們衝突檔案是master_file_for_rebase_test.txt,不能合併分支bba6994這個commit,要我們手動解決衝突,然後執行git add 或者git rm檔案,然後再執行git rebase --contiue繼續變基,當然,也可以直接git rebase --skip跳過這個commit,或者使用git rebase --abort放棄rebase。

這個時候,我們可以這麼解決rebase的衝突

step1:檢視衝突的檔案master_file_for_rebase_test.txt

step2:手動編輯檔案,選擇要儲存的內容,我們要儲存CCC,所以我們把BBB刪了,手動修改後是這樣子的

step3:使用git add命令儲存更改

git add master_file_for_rebase_test.txt

step4:執行git rebase --continue繼續變基(這裡不要使用git commit命令,只需要add即可

git rebase --continue

此時會出現vim視窗,讓你修改那個變基衝突的commit資訊

根據自己的情況修改,不修改也行

修改好:wq儲存即可

備註:這時候如果使用git status檢視,會告知你落後於自己遠端分支,讓你使用git pull合併遠端分支,此時還是老樣子,忽略該資訊即可

step5:正常變基流程咯,切到master分支,merge brach_a分支即可

git checkout master
git merge branch_a
git push

step6:檢視graph

備註:有時候會衝突多個commit,這個時候一個commit都會讓你解決一次衝突,這個時候不要著急,一個一個解決即可,直到提示successful成功變基到master,再去master上merge就好了。

三、寫在最後

  • 發現一個問題

    在自己的分支上rebase master分支後,使用git status時,有時候會告知你落後於自己遠端分支,讓你使用git pull合併遠端分支,此時忽略該資訊即可。

    我嘗試好幾種方式來使自己分支和遠端分支同步,結果不是多提交了commit資訊,就是產生了merge的交點。所以我一般就直接忽略該分支了,畢竟該分支的功能也完成了。下次開發重新拉出一個新分支開發即可。有辦法解決的同學,可告訴我一下。