git rebase
介绍
merge 是一种简单方便的合并方法,但是它却不是唯一的方法,rebase 也可以进行合并。
merge 合并分支后图形会出现一堆交叉线,合并出现冲突,不管多少次冲突都只要解一次
rebase 合并分支后图形只会形成一条线,查看时清晰明了,合并出现冲突比较麻烦,如果出现多次冲突需要一次一次去手动解决
简单来说就是,merge是合并其他分支的内容,rebase也是合并其他分支的内容,但rebase会把本分支的commits放在分支最顶部
相关参数
git rebase --abort 放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃
git rebase --skip 会将引起冲突的commits丢弃掉,一般谨慎使用
git rebase --continue 合并冲突时用,结合"git add 文件"命令一起用与修复冲突。
git rebase
使用
在项目中master作为主分支,dev作为开发分支。
分支合并
此时dev分支上在正在a文件添加新功能,忽然master上a文件出现一个bug,需要紧急修复。
一般情况下我们都会先基于 master 下创新一个新的分支 hotfix,然后在hotfix中修复bug,后再合并到master。
合并完后,会出现一个问题,就是master和dev的a文件都进行的操作会发生冲突,这个时候要求master的分支图必须是一条线,所以要在dev使用git rebase 进行合并。
首先在dev分支中将master分支rebase过来,使用命令
# git checkout dev
# git rebase master
如果没有冲突的话,合并会很顺利,但是由于我们之前修复bug改了a文件,所以会出现冲突,git会停止rebase让你去解决冲突,所以我们需要手动解决完冲突。
在rebase的时候会提示冲突,当然也可以用diff查看冲突
# git diff
这一步解决冲突就是将修复bug的代码手动添加到当前a文件中。
解决完冲突后再执行add,提交修改
# git add a
提交完后,不执行commit,执行
# git rebase --continue
这样git会继续apply余下的补丁。
合并多次提交
https://www.jianshu.com/p/913dad94f289
总结
rebase的目的是为了让分支图看起来是一条连续的commit line,避免不必要的commit形成分叉,方便后续code review。
在不是完全掌握rebase的情况下,多人开发的公共分支要把个人分支合并进来时,推荐merge
,避免造成不必要的麻烦,
另外我们在pull的时候也可以使用rebase,使拉取远程代码到本地时的保证不会分叉,只形成一条commit line
# git pull –rebase