场景:A同学修改了active.php文件,提交并推送到dev分支。
B同学没有拉取A同学推送的内容下来,又修改了active.php文件,然后此时提交,然后推送就报冲突了。此时如果用sourcetree是拉取也会报错的。
解决方法:
第一种:
sourcetree切换到别的分支,在切换回来,然后拉取就不会报错。有冲突就解决冲突,标记冲突为已解决。然后提交推送
第二种:
sourcetree拉取,直接勾选 用变基代替合并 ,然后拉取。有冲突就解决冲突,标记冲突为已解决。然后提交推送
第三种:
用vscode编辑器,直接拉取合并。有冲突就解决冲突,然后提交,它会自动处理好。
第四种:
到项目文件页面,打开git Bash Here, 然后执行 git pull --rebase 。然后有冲突解决冲突,在继续变基。没冲突直接变基成功。
参考链接:
git pull --rebase (将本地当前分支里的每个提交(commit)取消掉,然后把将本地当前分支更新为最新的"origin"分支)
git rebase --abort
会放弃合并,回到rebase操作之前的状态【也就是修改文件没提交的状态,但是文件修改内容不会丢失】,之前的提交的不会丢弃;
git rebase --skip
则会将引起冲突的commits丢弃掉(慎用!!)【会把B同学修改的都干掉】
git rebase --continue
合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run “git rebase --continue”)
对上述冲突的处理
1、使用 $git rebase --abort
执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销rebase。
2、使用 $git rebase --skip
git rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说B同学对active.php文件的commit无效,B同学自己修改的部分全部无效,因此,在使用skip时请慎重。
3、使用 $git rebase --continue
执行完$git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:
$ git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。