git的突出解决--gitreba之abort、continue、skip
next world(1)应⽤实例描述
假设在github或者gitoschina上建⽴了⼀个项⽬,默认分⽀为master分⽀,远程master分⽀上c.sh⽂件内容:
开发者A、B分别将项⽬拷贝到⾃⼰本地进⾏开发
某⼀天,开发者B提交c.sh,并且提交成功,
之后,开发者A在本地代码并没有和远程master分⽀的代码同步的情况下,对本地的c.sh进⾏了修改,修改后c.sh内容如下:
修改后,开发者A准备将代码提交到远程master分⽀上。
will adamowicz(2)引⼊问题
佩顿曼宁假设开发者A提交过程如下:
$ git add c.sh
$ git commit -m "XXXX"
如果直接使⽤$ git push,则会报错:
error: failed to push some refs to 'git@:XXXX/gitlearning.git'
hint: Updates were rejected becau the remote contains work that you do not have locally. This is usually caud by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., 'git pull ...') before pushing again. See the 'Note about fast-forwards' in 'git push --help' for details.
上述过程的节点⾛向如下图所⽰:
massage是什么意思实际开发过程中考虑其它开发者可能会对c.sh进⾏修改,因此⼀般在开发过程中建议使⽤
$ git pull --reba
加州理工学院与远程代码同步,同步过程会检查冲突,
此时,开发者根据 <<<<<<< HEAD,=======,>>>>>>> 便可知冲突的位置。
scoop
注意:不是出现冲突才使⽤git pull --reba,它是⼀种解决冲突的⼿段,另外还有merge的⽅式
swept(3)知识点引⼊
$ git pull --reba
git pull的默认⾏为是git fetch + git mergesat成绩有效期
git pull --reba则是git fetch + git reba.
$ git fetch一建合格分数线
从远程获取最新版本到本地,不会⾃动合并分⽀
$ git reba
$ git pull --reba
git pull --reba执⾏过程中会将本地当前分⽀⾥的每个提交(commit)取消掉,然后把将本地当前分⽀更新为最新的"origin"分⽀,该过程本地分⽀节点更新图如下所⽰:
------------------------------------------------------------------------------------------
(4)回到主题
迈克尔杰克逊you are not alone执⾏完git pull --reba之后如果有合并冲突,使⽤以下三种⽅式处理这些冲突:
git reba --abort 会放弃合并,回到reba操作之前的状态,之前的提交的不会丢弃;
git reba --skip 则会将引起冲突的commits丢弃掉(慎⽤!!);
git reba --continue 合并冲突,结合"git add ⽂件"命令⼀起⽤与修复冲突,提⽰开发者,⼀步⼀步地有没有解决冲突。(fix conflicts and then run "git reba --continue")
对上述冲突的处理
1、使⽤ $git reba --abort
执⾏之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销reba。
2、使⽤ $git reba --skip
git reba --skip 引起冲突的commits会被丢弃,对于本⽂应⽤的例⼦来说开发者A对c.sh⽂件的comm
it⽆效,开发者A⾃⼰修改的部分全部⽆效,因此,在使⽤skip时请慎重。
执⾏:$ vim c.sh
查看本地c.sh⽂件提交内容,展⽰如下图所⽰,执⾏语句之后开发者A的修改⽆效。
3、使⽤ $git reba --continue
执⾏完$git pull --reba 之后,本地如果产⽣冲突,⼿动解决冲突之后,⽤"git add"命令去更新这些内容的索引(index),然后只要执⾏: $ git reba --continue 就可以线性的连接本地分⽀与远程分⽀,⽆误之后就回退出,回到主分⽀上。
注意:⼀般情况下,修改后检查没问题,使⽤reba continue来合并冲突。