出现冲突的表现:gitlab合并mr时提示需要解决冲突、执行拉取操作提示confilct、代码出现左右红色箭头等。

情景1:解了一部分冲突还没有解完,因为一些因素想重新解决冲突时

此时执行git status查看,会提示如下字样:

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

执行

git merge --abort

丢弃改动重新解决冲突,点击version control,在local changes视图下,点击resolve,三方代码界面打开,将正确的代码加到中间模块,必要时做手动改动,完了后点apply。

Note:上面一步打开窗口解决冲突时,建议先将开发分支的放到中间,再将自己本次提交要改动的东西加到中间,这样可以最大化的不出错,因为对于开发分支来说,你提的代码就是要覆盖开发分支的部分代码,当然你如果先把自己分支的先移到中间也不是不可以。

此时可以再git status查看状态,如果你前面拉取过代码而提示了confilct,那么执行

git rebase --continue

最后进行push:

git push -f origin xxx

情景2:出现了冲突,还没有解决

git fetch

git rebase origin/develop

就会提示confilct (指令中的develop是远端的开发分支),接下来与上面步骤一致,只是没有第一步的git merge --abort操作

情景3:冲突不完全解决,且做了push操作,两次commit内的内容已经混乱出现交叉,尽量合为一个commit

此类情况建议进行撤销操作,从头再来!

首先,依旧先git status查看状态,撤销两次commit(假如解决本次mr冲突时涉及到两次提交),到达起点,并更新:

git reset head~1
git reset head~1
git add .
git commit -m "提交名称"
git push -f origin xxx
git fetch
git rebase origin/develop
出现冲突...

此时重新出现冲突,会提示confilct,与情景1中的部分步骤类似,进行resove操作之后,执行

git rebase --continue

最后进行push:git push -f origin xxx

到此,mr只出现了一个commit,且是最后一次的commit名称,解决了冲突,达到了目的。

注意:撤销操作也可一次性撤销两次,但是不建议这么做,笔者认为一次撤销一次commit更稳一些,可以即时查看回退的状态,避免撤销手误造成困扰。