在git中解决'两者都添加'的合并冲突?

时间:2012-03-22 13:54:47

标签: git merge rebase

我在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如何知道我想删除哪个文件版本以及我想保留哪个文件?

3 个答案:

答案 0 :(得分:125)

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

您可以使用git checkout --ours src/MyFile.cs从您要重新定位的分支机构中选择版本,或git checkout --theirs src/MyFile.cs从您正在重新定位的分支机构中选择版本。

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

答案 1 :(得分:63)

我有时会发现使用--theirs--ours选项来识别文件的来源会让人感到困惑。大多数情况下,我将在我正在变调的分支中,--theirs引用!

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

<tree-ish>可以由包含您希望保留的文件的分支名称或commit-id替换。

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

答案 2 :(得分:34)

什么时候......

git checkout --ours someFile

在执行git状态时,似乎没有做任何事情。

请记住事后再这样做。

git add someFile
git status