GIT合并冲突:创建新分支并删除一些文件后

GIT merge conflict: after create new branch and deleting some files

我遇到 GIT 合并的问题。事实上,我有一个具有这种架构的主分支:

.git
doc
   \__ some files

src
   \__ tools 1
              \__ some files

   \__ tools 2
              \__ some files

在我的项目中,我开发了工具,我会在"src"目录下添加其他工具。为此,每次我想创建一个新工具时,我都会从 master 分支创建一个名为 "tools3" 的新分支,然后删除我不需要的所有目录,这里是 "tools 1"、"tools 2" 和 "doc"。原因是我不需要文档和其他工具来开发。

所以现在,在删除这些内容之后,我编写了我的 "tools 3",然后提交并将其推送到新分支 "tools3"。是时候将我的两个分支与 git merge tools3 -m "Merge tools3 branch with master branch"(在 master 分支中)合并了。

我有两个问题,首先是与文档文件之间的一些冲突:

冲突消息: CONFLICT (modify/delete): doc/api_project.json deleted in tools3 and modified in HEAD. Version HEAD of doc/api_project.json left in tree.

第二次,合并删除了我的 "src" 文件(我之前在 "tools3" 分支中删除的文件)。

那么,我怎样才能解决这个合并冲突,然后我怎样才能在 master 分支中检索我删除的文件?我想我没有用 GIT 做这类事情的最佳实践,所以我愿意接受任何关于 GIT 实践的建议。

您不得从不需要的存储库中删除文件。这就是您遇到冲突的原因。

虽然您一直在您的 tools 3 目录中工作,但其他贡献者可能也在其中工作。例如。修复错误、添加新功能等。他们已经完成工作并将其推送到 master

当你推进工作的时候,历史已经发生了分歧。自从你开始你的分支以来,一方面你删除了一些文件,另一方面这些文件被其他人更改了。 Git 无法决定正确的路线,因此会产生冲突。

如果某个文件不再对整个项目有用并且不再需要它的源代码控制,那么您真的只想从 git 存储库中删除该文件。在我看来,您删除它们只是因为您想保留目录结构 "clean" 或其他一些我们只能推测的原因。

每次创建新工具时,您都在通过克隆主分支来创建分支。将新工具添加到新创建的分支后,您将在后台比较主分支和新创建的分支。因此,无论有什么新的更改,都会添加到 master 分支中,而修改的更改将来自 master 分支的 updated/removed。所以你不能从任何分支中删除代码,因为它会在合并时被删除。

您遇到的冲突是因为另一个人在 master 中对您在 tools3 中删除的文件之一进行了更改。因此,当您尝试合并时,git 需要弄清楚如何将在 master 中所做的更改应用到您在进行更改之前删除的文件。

视觉表示:

*   - Added doc/api_project.json
|\
| * - Deleted doc/api_project.json
| |
* | - [master] Updated doc/api_project.json
  |
  * - [tools3] Dev work on tools

正如您在上面看到的,要将这些提交放入单个分支,git 需要知道如何将第三次提交中所做的更改应用到第二次提交中删除的文件。

您不应在不适用于您在该分支中处理的功能的分支中进行任何更改。通过删除文件,您创建了一个删除这些文件的提交。

希望您将删除作为单独的提交执行(我们可以看到您的 tools3 分支的 git log 输出吗?)这意味着您需要做的就是从您的分支中删除该提交合并前的分支。

删除删除操作将解决你的两个问题,你将不再有冲突和从 master 分支中删除的文件(因为你在 tools3 中删除了它们)将不再删除。