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的交點。所以我一般就直接忽略該分支了,畢竟該分支的功能也完成了。下次開發重新拉出一個新分支開發即可。有辦法解決的同學,可告訴我一下。