How do I fix a merge conflict due to removal of a file in a branch?
Solution 1:
The conflict message:
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD
means that res/layout/dialog_item.xml
was deleted in the 'dialog' branch you are merging, but was modified in HEAD (in the branch you are merging to).
So you have to decide whether
- remove file using "
git rm res/layout/dialog_item.xml
"
or
- accept version from HEAD (perhaps after editing it) with "
git add res/layout/dialog_item.xml
"
Then you finalize merge with "git commit
".
Note that git will warn you that you are creating a merge commit, in the (rare) case where it is something you don't want. Probably remains from the days where said case was less rare.
Solution 2:
I normally just run git mergetool
and it will prompt me if I want to keep the modified file or keep it deleted. This is the quickest way IMHO since it's one command instead of several per file.
If you have a bunch of deleted files in a specific subdirectory and you want all of them to be resolved by deleting the files, you can do this:
yes d | git mergetool -- the/subdirectory
The d
is provided to choose deleting each file. You can also use m
to keep the modified file. Taken from the prompt you see when you run mergetool
:
Use (m)odified or (d)eleted file, or (a)bort?
Solution 3:
If you are using Git Gui on windows,
- Abort the merge
- Make sure you are on your target branch
- Delete the conflicting file from explorer
- Rescan for changes in Git Gui (F5)
- Notice that conflicting file is deleted
- Select Stage Changed Files To Commit (Ctrl-I) from Commit menu
- Enter a commit comment like "deleted conflicting file"
- Commit (ctrl-enter)
- Now if you restart the merge it will (hopefully) work.