Git 合并冲突及解决(一)

Git 合并冲突及解决(一)

Git 分支冲突及解决

一、单个分支下多人协作

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

用户一修改了 readme 并提交:

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)


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

用户一把 readme 重命名了

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)


情景三、删除与编辑

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

用户一重新拉取一下

Git 合并冲突及解决(一)


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

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

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

Git 合并冲突及解决(一)

用户一重新 pull 一下:

Git 合并冲突及解决(一)


二、分支合并冲突

待更。。。