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的交点。所以我一般就直接忽略该分支了,毕竟该分支的功能也完成了。下次开发重新拉出一个新分支开发即可。有办法解决的同学,可告诉我一下。
-
不应该使用rebase的场景
参考另一篇博文https://www.cnblogs.com/rainbow-tan/p/15314711.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)