三、git rebase

当本地commit一个提交和远端服务器中的代码有冲突(别人也改了相同的文件)时可以在pull 中加 –rebase。加上 rebase 的意思是:

  1. 把本地 repo. 从上次 pull 之后的变更暂存起來
  2. 恢复到上次 pull 时的状态
  3. 合并远端的变更到本地
  4. 最后再合并刚刚暂存下來的本地变更

合并前:

  D---E master
     /
A---B---C---F origin/master

merge合并后:

    D--------E  
     /          \
A---B---C---F----G   master, origin/master

rebase合并,就不會有 G 合并点:

A---B---C---F---D'---E'   master, origin/master

注意到,其中 D’, E’ 的 commit SHA 序号跟本來 D, E 是不同的,应为算是砍掉重新 commit 了。

rebase vs. merge
rebase 跟 merge 类似,出现 conflict 会暂停 rebase 动作,需要你手动修复后,然后才可以继续动作。这也是 rebase 比 merge 复杂一点的地方:merge 如果发生 conflict,你只需要解决冲突一次,然后commit 出去就完成了。而 rebase 的 conflict 可能会发生在上述步骤 4 的每一次重新套用上,所以可能需要解决冲突好几次 (rebase 时所谓的解决冲突,其实是直接修改你之前的变更內容,所以上图中变成 D’ 跟 E’ )。
配置
如果想要把 rebase 当做 git pull 的默认值,可以在 .git/config 加上

[branch "master"]
  remote = origin
  merge = refs/heads/master
  rebase = true

也可以直接加到 ~/.gitconfig 让所有的 tracked branches 都自动套用这个设定:

[branch]  
  autosetuprebase = always

解决git rebase冲突:

===============正规情况========================
rebase的冲突解决过程,就是解决每个应用补丁冲突的过程。
解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):

git add -u

注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。

然后执行下面命令继续rebase:

git rebase --continue

有冲突继续解决,重复这这些步骤,直到rebase完成。

如果中间遇到某个补丁不需要应用,可以用下面命令忽略:

git rebase --skip

如果想回到rebase执行之前的状态,可以执行:

git rebase --abort

注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。

===============简便情况=================
都是git rebase被终止之后我们使用

git rebase --continue

编辑完所有的冲突:

git add -u
git commit 

refrence1:http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html

refrence2:http://blog.csdn.net/huangyabin001/article/details/30100287

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值