GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_git

Git 分支冲突及解决

一、单个分支下多人协作

情景一:多人编辑了同一文件

用户一修改了 readme 并提交:

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_重命名_02

用户二也修改了 readme ,当 pull 的时候因为本地也修改过 readme 了与远程仓库内容不一致了,造成了冲突。这里提示我们本地修改的内容还没有暂存,需要先暂存起来。

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_其他_03

暂存后,再次 pull,就会自动合并,合并的冲突保存在有冲突的文件内

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_其他_04

我们查看一下它是怎么合并并保存冲突的

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_分支合并_05

需要注意的是 “<<<<<<<” 和 ”“ 之间的是本地做出的修改,而 ”“ 与 ”>>>>>>>>“ 之间的是远程仓库的修改内容,并给出冲突的提交版本号信息,接下来要做的就是打开该文件,手动选择应该怎么解决,是保留自己的修改删除远程仓库的还是放弃自己的采用别人的,还是结合二者?手动修改后再次提交

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_重命名_06


情景二:重命名与编辑(一)

用户一把 readme 重命名了

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_分支合并_07

用户二还在原来的 readme 上进行编辑,当 pull 时,会自动重命名并进行合并,合并采用的是”递归策略“,一般涉及在分支合并中找共同祖先,概念较多,此处不展开了,这里自动默认接受用户一的 rename 操作,如果不接受,可以在解决冲突后再改回去。(这里需要两个人协商好到底叫什么,或者由谁以后进行重命名操作等,以免带来复杂冲突)

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_分支合并_08


情景三、删除与编辑

用户一直接把 README.md 删掉了

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_远程仓库_09

用户二可能还在基础这个文件进行编辑,再次 pull,又冲突了

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_其他_10

经过沟通后,用户二如果觉得该文件还是不要删,还有用,那么就可以重新加回来

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_分支合并_11

用户一重新拉取一下

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_git_12


情景四、重命名与编辑(二)

用户一对文件重命名并修改了文件内容

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_其他_13

用户二很不巧,也出于某种原因进行了重命名并进行了编辑

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_git_14

当用户二拉取的时候,就冲突了

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_远程仓库_15

根据提示,你可以 rm 掉不想要的内容,add 想要留下来的东西,比如这里假设经过协商后,用户二放弃自己的修改内容,接受用户一的修改内容。

在这里,我遇到了一个问题,直接 rm 掉 README.md 和 other_name.md,add readme.md 后进行 commit,实际这三个文件都被干掉了,没办法每次操作都 status 一下,也确实提示了 deleted: readme.md,如下图所示,有知道这是为什么的,欢迎评论区告知一下。我后面为了强行留下 readme.md,下面又做了一步 restore 操作。

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_其他_16

虽然上面的操作把 readme.md 给保留下来了,并删除了 README 和 other_name.md ,但是 readme 中的文件是有冲突的,需要解决冲突

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_重命名_17

最后 commit 提交冲突解决情况并 push

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_远程仓库_18

用户一重新 pull 一下:

GitLab合并请求报错 Validate branchesAnother open merge request already exist gitlab解决合并冲突_远程仓库_19


二、分支合并冲突

待更。。。