【问题标题】:Prohibit merge-conflicts with deleted files禁止与已删除文件发生合并冲突
【发布时间】:2018-06-14 13:10:36
【问题描述】:

假设我有一个带有两个或多个分支的 git 存储库。在分支 a 我删除了一些文件:

B 分支(分支 A 分支):

git rm fileA.txt 
git rm fileB.txt

现在我们在分支 A 中进行了很多更改。其中一些更改是在 fileA.txt 和/或 fileB.txt 中完成的。 我们必须将分支 A 合并到分支 B,因为我们需要所有更改。现在我与 fileA.txt 和/或 fileB.txt 发生冲突:

CONFLICT (modify/delete): fileA.txt ...

这是正常的 git 行为。但我不希望在每个合并表单分支 A 到分支 B 中我都会遇到这些冲突。它应该自动接受删除这些文件。

如何做到这一点?

问候,萨沙

【问题讨论】:

  • 这可能是您正在寻找的答案stackoverflow.com/questions/10697463/…
  • @MiguelOrtiz: 不,-X theirs 表示在解决inin 文件的冲突时,使用它们的更改,但它对这些更高级别的(树)冲突没有影响。

标签: git merge conflict


【解决方案1】:

你不能告诉 Git 在 git merge 运行期间更喜欢删除文件。

可以做的是在自动合并失败时自动清理 Git 留下的混乱,就像在这些修改/删除冲突之后一样。

请参阅my answer 相关问题:git rebase conflicts, how to delete all conflicting files that were deleted in the HEAD

在那里,与合并基础提交相比,您在HEAD 提交和它们的提示提交中删除但修改的文件将存在于第 2 阶段索引,但将存在于阶段 1 和 3。

他们删除但修改的文件将存在于第 1 阶段和第 2 阶段,但不在第 3 阶段。

您可以阅读整个索引内容,注意哪些文件存在于哪些阶段。从此,您应该确定要删除哪些文件。使用git rm 删除它们(从它们存在的所有索引阶段以及工作树中),您已经解决了这些冲突。如果您编写一个程序来执行此操作,您将这部分全部自动化:

git checkout <branch>             # set up your HEAD
git merge <other>                 # start the merge, which gets conflicts
program-to-clean-up-the-index     # do file-deletions automatically
git status                        # see what's left to do
...                               # do whatever is required
git commit                        # finish the merge

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多