在协同开发时,有很多代码管理的方式,这里我列举我与同事协同开发时的方案
git rebase develop
分支变基,将上游分支 develop 分支上的最新代码合并到自己分支,并解决冲突本篇主要聊聊在使用 git rebase
时的流程、采坑
因为同样是合并分支,所以就会有一个疑问,为什么不用 merge
,merge
和 rebase
有什么差别?
那么首先我们聊聊这个问题
观察这两种命令的 commit 记录,可以梳理出他们的流程,如下图:
由此,我们可以得出merge
和 rebase
的区别,merge 是将所有人的 commit 记录按时间合并排列,rebase 是按提交人的操作顺序将主线按线性排列。一个是按 commit 时间排,一个是按人排
图片来源:http://gitbook.liuhui998.com/4_2.html
接下来,就是开始使用 git rebase
$ git checkout xxx-dev
$ git rebase develop
或者不用切换分支,采用 git rebase [basebranch] [topicbranch]
的方式,basebranch是目的分支(即本例的 develop 分支),topicbranch是源分支(即本例的 xxx-dev 分支),总的意思是将 xxx-dev 分支中的修改变基到 develop 分支上。这样做能省去你先切换到 xxx-dev 分支,再对其执行变基命令的多个步骤。
即:
$ git rebase develop xxx-dev
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用 git add
命令去更新这些内容的索引(index),然后无需执行 git commit
,只要执行:
$ git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用–abort参数来终止rebase的行动,并且"xxx-dev" 分支会回到rebase开始前的状态。
$ git rebase --abort
在对两个分支进行变基时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行应用。
假设你希望将 next 中的修改合并到主分支并发布,但暂时并不想合并 dev 中的修改。 这时,你就可以使用 git rebase 命令的 --onto 选项,选中在 next 分支里但不在 dev 分支里的修改(即 B5 和 B6),将它们在 master 分支上重放:
$ git rebase --onto master dev next
以上命令的意思是:“取出 next 分支,找出处于 next 分支和 dev 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”。
现在回到 master 分支,进行一次快进合并。
$ git checkout master
$ git merge next
接下来还可以把 dev 分支的修改也整合进来,这里就不演示了,方法和示例一是一样的。
最后,分支中的修改都已经整合到主分支里了,你可以删除这两个分支:
$ git branch -d dev
$ git branch -d next
第二种情况借鉴于:Git:合并分支----git rebase命令的使用
我们开发的过程中,可能会有多次的修补提交,就会出现多条提交记录和备注信息,此时我们可以使用 git rebase -i
来合并多个commit,以简化提交记录
1.使用git log
查看提交记录,查询完毕后按q
键退出查询
$ git log
git rebase -i [startpoint] [endpoint]
例如:
$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7
或使用 git rebase -i HEAD~2
在终端输入:git rebase -i HEAD~2
这里的 HEAD~2 表示合并最近两次的提交,
如果想合并最近三次的提交修改为: git rebase -i HEAD~3
修改完成后,按Esc
键回到最下方命令行,输入:wq
完成保存并退出
ps:中途出现 rebase 可按照提示操作,如果可以忽略,则使用 git rebase --continue
来继续
3.执行完成后将弹出修改备注版面
完成编辑后,按Esc
键回到最下方命令行,输入:wq
完成保存并退出
待程序运行,最后得到Successfully的结果,即完成合并
4.最后再使用 git log
查看,之前的提交信息就都合并成了我们编辑的最后一条
合并之后再推送的远程仓库,信息条目就清晰很多,条数也会相对较少
参考:
巧用 git rebase 合并多个 commit:https://www.cnblogs.com/yxhblogs/p/10527271.html
【Git】rebase 合并 commit 用法小结:https://www.jianshu.com/p/4a8f4af4e803
Git:合并分支----git rebase命令的使用:https://blog.csdn.net/qq_42780289/article/details/98078717
git rebase 合并分支命令:http://gitbook.liuhui998.com/4_2.html