在 git 中解决“兼容”合并冲突?

我在 git 中重新定基,我得到的一个冲突是‘ both add’——也就是说,在我的分支中独立地添加了相同的文件名,在我重新定基的分支中也添加了相同的文件名。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 如何知道要删除哪个文件版本,以及要保留哪个版本?

88097 次浏览

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

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

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

我有时会发现使用 --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

当做..。

git checkout --ours someFile

在处理 git 状态时,它似乎没有做任何事情。

之后记得这么做。

git add someFile
git status