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

问题描述 投票:0回答:3

我正在 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 merge rebase
3个回答
175
投票

如果您使用

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

您可以使用

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

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


86
投票

我有时发现使用

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


53
投票

在做...时

git checkout --ours someFile

Git 此时无法识别此类状态更改,无法推送到拉取请求,并且似乎没有执行任何操作。要解决此问题,也请随后执行此操作:

git add someFile
git status
git push 
© www.soinside.com 2019 - 2024. All rights reserved.