rerere affects handling of git-stash-pop merge conflicts
- From
Phil Hord <hordp@cisco.com>
- Date
- Jul 14, 2011, 17:09 UTC
- Message-ID
- <4E1F22DF.7060209@cisco.com>
I was investigating a git-stash-pop anomaly when I ran across this one. I think this is residual breakage from [1] bb0a484 (mergetool: Skip autoresolved paths, 2010-08-17). A similar problem aimed at 'git merge' was ostensibly fixed by [2] 2f59c9 (mergetool: don't skip modify/remove conflicts, 2011-02-16).
[1] http://thread.gmane.org/gmane.comp.version-control.git/153420 [2] http://thread.gmane.org/gmane.comp.version-control.git/164622
Summary: After a 'git stash pop' with conflicts, 'git mergetool' fails to notice the conflicted files if 'rerere.enabled=true'. git mergetool erroneously reports 'no files need merging'.
After a 'git merge' with conflicts, 'git mergetool' seems to work ok in either case.
Here's my test script:
------8<------ /tmp/stash.sh #!/bin/bash
#enable/disable rerere for this test git config --global rerere.enabled ${1:false}
# run the test rm -rf foo mkdir foo && cd foo && git init && echo A>file && git add file && git commit --quiet -m "A" && echo B>file && git stash && echo C>file && git add file && git commit --quiet -m "C" && git stash pop
git mergetool ------8<------ /tmp/stash.sh
git --version
git version 1.7.6.178.g55272# With rerere.enabled=false, it works ok (mergetool offers to # merge the conflicting file): ./stash.sh false
Initialized empty Git repository in /tmp/foo/.git/
Saved working directory and index state WIP on master: ac67a86 A
HEAD is now at ac67a86 A
Auto-merging file
CONFLICT (content): Merge conflict in file
merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff
tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff
emerge
Merging:
file Normal merge conflict for 'file':
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (xxdiff): ^C# But with rerere.enabled=true, mergetool thinks there is no conflict: ./stash.sh true
Initialized empty Git repository in /tmp/foo/.git/
Saved working directory and index state WIP on master: d40e77b A
HEAD is now at d40e77b A
Auto-merging file
CONFLICT (content): Merge conflict in file
merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff
tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff
emerge
No files need mergingPhil