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

posted @ 2021-09-19 22:24  南风丶轻语  阅读(11075)  评论(0编辑  收藏  举报