After merging branched I've received a conflict (rename/rename)
on bunch of files, with file~HEAD
, and file~my_test_branch
created. How to resolve these?
Thanks
Given the following test-setup:
git init resolving-rename-conflicts
cd resolving-rename-conflicts
echo "this file we will rename" > will-be-renamed.txt
git add -A
git commit -m "initial commit"
git checkout -b branch1
git rename will-be-renamed.txt new-name-1.txt
git commit -a -m "renamed a file on branch1"
git checkout -b branch2 master
git rename will-be-renamed.txt new-name-2.txt
git commit -a -m "renamed a file on branch2"
git checkout master
Then merging branch1 and branch2
git merge --no-ff branch1
git merge --no-ff branch2
Yields:
CONFLICT (rename/rename): Rename "will-be-renamed.txt"->"new-name-1.txt" in branch "HEAD" rename "will-be-renamed.txt"->"new-name-2.txt" in "branch2"
Automatic merge failed; fix conflicts and then commit the result.
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
added by us: new-name-1.txt
added by them: new-name-2.txt
both deleted: will-be-renamed.txt
no changes added to commit (use "git add" and/or "git commit -a")
If you want to keep one file, say new-name-2.txt
:
git add new-name-2.txt
git rm new-name-1.txt will-be-renamed.txt
git commit
Of course in chosing one file or the other, you may have other changes to make to files that reference this file by-name. Also, if there are other non-rename changes to the file, pre-or-post rename on the branches, you will need to manually diff and merge those to retain them in the file you are retaining.
If you instead want to keep both files:
git add new-name-1.txt new-name-2.txt
git rm will-be-renamed.txt
git commit