首页 > 解决方案 > 将文件移动到主文件夹中。现在分支有合并冲突

问题描述

我们的项目文件太多。所以在主分支上,我将文件移动到文件夹中,现在看起来很干净。但是,当我将 master 合并到所有其他分支中时(因此它们具有最新更新),它们存在合并冲突,我不明白它们的含义或如何解决它们。

在master中,文件被移动了。在分支中,这些文件可能有很多修改。

如何在保留每个人的更改的同时将 master 合并到不同的分支中?

这是 Github 桌面允许我做的事情,但我不知道这些选项是什么意思:

在此处输入图像描述

标签: gitgit-mergegit-merge-conflict

解决方案


您似乎认为文件的移动是 git 中的“事物”,并且您合并到的分支将以某种方式神奇地“获取”此移动作为功能,而不会发生任何其他事情,或者将其“折叠”成任何东西其他的已经发生了。那不是真的;那不是git。Git 从单个文件的角度来考虑,单个文件是一个单一的路径

所以file.txt是一个文件。如果将其移动到folder/file.txt,那是一个不同的文件。Git 看到一个文件消失并出现一个新文件。如果情况足够简单, Git 会尝试将这两个文件相互连接,但不能保证。即使它这样做了,它也不认为这是一个“举动”;它认为它是一个重命名

所以我想像这样的事情发生了:

on master:

     file file.txt moved to [was renamed as] myfolder/file.txt

on branch:

     file file.txt modified in place

所以,这是一个冲突。一个分支重命名了文件,另一个分支修改了文件。Git 不知道你想做什么,所以它留给你。

但是也没有简单可行的前进方式。你做了一件坏事。你想要这两件事中的哪一个,重命名还是修改?两者都不!您希望file.txt in中的文件内容,但您希望它们位于“相同”文件所在的位置,即myfolder/file.txt。耶!branchmaster

你打算如何解决这个烂摊子?最简单的方法是退出合并并重新开始。您有两个主要选择:

  • 在分支上做你的重新安排工作。换句话说,打电话给团队中的每个人说,“嘿,每个人,在你正在处理的任何分支中,进行一次提交,将file.txt移动到myfolder/file.txt,然后再进行一次提交。” 如果每个人都做同样的事情,它就会成功地合并到master中。

  • 完全推迟重排。打电话给每个人说:“大家好,当你完成这个分支时,停止工作,直到每个人都合并。” 等到每个人都合并了,然后重新排列。现在每个人都可以拉大师,工作可以从新的分支重新开始。


推荐阅读