解决git中的“都添加”合并冲突?


138

我在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

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

Answers:


139

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

您可以用来git checkout --ours src/MyFile.cs从要重新基准化的分支中选择版本,也可以从要重新基准化git checkout --theirs src/MyFile.cs的分支中选择版本。

如果要混合,则需要使用合并工具或对其进行手动编辑。


1
谢谢。我只是意识到合并工具不起作用的原因是因为git为合并创建了.LOCAL和.REMOTE文件,而不是.BASE文件。我认为它应该只创建一个空的.BASE文件。如果您手动创建一个空的.BASE文件,则合并工具可以正常工作。
耶斯(Jez)2012年


1
那么,您是说这将在git的最新版本中得到解决吗?
耶斯(Jez)2012年

1
@Jez:使用git版本> = 1.7.9.1git.kernel.org/?p=git​​/…–
CB Bailey

21
来自@Tom的答案:执行时... git checkout --ours someFile 似乎在执行git status时未执行任何操作。 请记住,以后要这样做。 git add someFile git status
pec

72

有时,使用--theirs--ours选项来标识文件的来源会使我感到困惑。大多数时候,我的分支将在我正在改编的分支中,即由所指--theirs

您也可以使用 git checkout <tree-ish> -- src/MyFile.cs

<tree-ish>既可以由分公司名称或更换提交-ID,其中包含你想保留的文件。

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs


42

当做...

git checkout --ours someFile

在执行git status时似乎没有执行任何操作。

请记住,以后要这样做。

git add someFile
git status
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.