Git命令之rebase合並分支


零、使用場景

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

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

image-20210918200023159

為了開發清爽,保證沒有交叉點,這個時候可以使用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圖形是這樣子的。

image-20210919140634564

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

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

step1:先切到branch4分支

git checkout branch4
image-20210919145212303

step2:使用rebase命令把自己的commit信息復制到master分支上

git rebase master
image-20210919145303607

備注:執行了rebase master后使用git status時,會出現該信息,告知你落后於branch4分支,讓你使用git pull合並遠程分支,此時忽略該信息即可。

step3:切換到master分支

git checkout master
image-20210919145745594

step4:在master上merge branch4分支

git merge branch4
image-20210919145920685

step5:推到遠程master分支

git push
image-20210919150019975

step6:查看graph

image-20210919150250327

備注:此時可以看到,已經合並了branch4上的commit信息到master上了,且沒有交叉出現,大功告成。

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

⑥查看graph

image-20210919150716406

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

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

image-20210919150950833

二、git rebase解決沖突

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

①在master分支上,添加一個文件為master_file_for_rebase_test.txt文件,文件內容為AAA

image-20210919214634951

②在master上checkout出一個分支branch_a

③在master上修改文件master_file_for_rebase_test.txt,內容為BBB

image-20210919214821533

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

image-20210919215025297

⑤此時的graph是這樣子的

image-20210919215100865

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

git checkout branch_a
git rebase master
image-20210919215332534

此時提示我們沖突文件是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

image-20210919215903650

step2:手動編輯文件,選擇要保存的內容,我們要保存CCC,所以我們把BBB刪了,手動修改后是這樣子的

image-20210919220010636

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

git add master_file_for_rebase_test.txt
image-20210919220303241

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

git rebase --continue

此時會出現vim窗口,讓你修改那個變基沖突的commit信息

image-20210919220613739

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

image-20210919220723644

修改好:wq保存即可

image-20210919220806584

備注:這時候如果使用git status查看,會告知你落后於自己遠端分支,讓你使用git pull合並遠程分支,此時還是老樣子,忽略該信息即可

image-20210919220902307

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

git checkout master
git merge branch_a
git push

step6:查看graph

image-20210919221549447

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

三、寫在最后

  • 發現一個問題

    在自己的分支上rebase master分支后,使用git status時,有時候會告知你落后於自己遠端分支,讓你使用git pull合並遠程分支,此時忽略該信息即可。

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

  • 不應該使用rebase的場景
    參考另一篇博文https://www.cnblogs.com/rainbow-tan/p/15314711.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM