问题
I'm rebasing in git, and one conflict I get is 'both added' - that is, exactly the same filename has been added independently in my branch, and in the branch I'm rebasing on. git status
tells me:
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both added: src/MyFile.cs
My question is, how do I resolve this? Must I use a merge tool or is there a way I can do it just from the commandline? If I git rm src/MyFile.cs
, how does git know which file version I want to remove and which I want to keep?
回答1:
If you use git rm
git will remove all versions of that path from the index so your resolve action will leave you without either version.
You can use git checkout --ours src/MyFile.cs
to choose the version from the branch onto which you are rebasing or git checkout --theirs src/MyFile.cs
to choose the version from the branch which you are rebasing.
If you want a blend you need to use a merge tool or edit it manually.
回答2:
I sometimes find it confusing using the --theirs
and --ours
options to identify where the file will come from. Most of the time mine will be in the branch I am rebasing which is referred to by --theirs
!
You can also use git checkout <tree-ish> -- src/MyFile.cs
Where the <tree-ish>
can be replaced either by the branch name or commit-id that contains the file you wish to keep.
git checkout 6a363d8 -- src/MyFile.cs
git checkout my_branch -- src/MyFile.cs
git checkout HEAD -- src/MyFile.cs
回答3:
When doing ...
git checkout --ours someFile
It may seem like it didn't do anything when doing git status.
Just Remember to do this afterwards.
git add someFile
git status
来源:https://stackoverflow.com/questions/9823692/resolving-a-both-added-merge-conflict-in-git