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