【问题标题】:Resolving a 'both added' merge conflict in git?解决 git 中的“都添加”合并冲突?
【发布时间】:2012-04-07 02:20:37
【问题描述】:

我在 git 中进行变基,我得到的一个冲突是“都添加” - 也就是说,完全相同的文件名已独立添加到我的分支中,并且在我正在变基的分支中。 git status 告诉我:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

我的问题是,我该如何解决这个问题?我必须使用合并工具还是有一种方法可以仅从命令行执行?如果我git rm src/MyFile.cs,git如何知道我要删除哪个文件版本以及我要保留哪个文件版本?

【问题讨论】:

    标签: git merge rebase


    【解决方案1】:

    如果您使用git rm git 将从索引中删除该路径的所有版本,因此您的解析操作将使您没有任何版本。

    您可以使用git checkout --ours src/MyFile.cs 从您要变基的分支中选择版本,或使用git checkout --theirs src/MyFile.cs 从您要变基的分支中选择版本。

    如果您想要混合,则需要使用合并工具或手动编辑。

    【讨论】:

    • 谢谢。而且我刚刚意识到合并工具不起作用的原因是因为 git 为合并创建了 .LOCAL 和 .REMOTE 文件,而不是 .BASE 文件。我认为它应该只创建一个空的 .BASE 文件。如果您手动创建空的 .BASE 文件,则合并工具可以正常工作。
    • 那么你是说这会在最新版本的 git 中修复?
    • @Jez:在 git 版本中 >= 1.7.9.1 git.kernel.org/?p=git/…
    • 来自@Tom 的回答:当做...git checkout --ours someFile 看起来它在做 git status 时似乎没有做任何事情。 请记住之后再做。 git add someFilegit status
    【解决方案2】:

    我有时会发现使用--theirs--ours 选项来识别文件的来源会让人感到困惑。大多数时候我的将在我正在重新定位的分支中,--theirs!

    你也可以使用git checkout &lt;tree-ish&gt; -- src/MyFile.cs

    &lt;tree-ish&gt; 可以替换为包含您希望保留的文件的分支名称或提交 ID。

    git checkout 6a363d8 -- src/MyFile.cs

    git checkout my_branch -- src/MyFile.cs

    git checkout HEAD -- src/MyFile.cs

    【讨论】:

    • 我无法强调理解这一点的精确性和重要性。我们的和他们的只是隐藏了你真正想要的东西,那就是在添加两者时指出你想要使用哪个文件作为分辨率。
    【解决方案3】:

    当做...

    git checkout --ours someFile

    在做 git status 的时候好像什么都没做。

    请记住之后再执行此操作。

    git add someFile
    git status
    

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2017-05-10
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多