零、使用场景
正常合并分支,我们一般都用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的交点。所以我一般就直接忽略该分支了,毕竟该分支的功能也完成了。下次开发重新拉出一个新分支开发即可。有办法解决的同学,可告诉我一下。