Okay, so I really like the git rerere
command, although I haven't really used it that much other than letting it auto-magically record my conflicts and resolve them for me. However, I did mess up one of my conflict resolutions during quite a large rebase (rebasing a really stale feature branch with the latest release).
feature -> a - b - c - d
release -> e - f - g - h
rebase/feature -> e - f - g - h .
` a' - b' - c' - d'
So, say for instance that b'
has an incorrect merge (thanks to me!), and I want to re-record that. How would I do it? I've seen the git checkout --conflict
option, mentioned in Rerere Your Boat, but I'm not too clear on how that works and if it applies here. Maybe I have to checkout the merge conflict state and run git rerere
once I correctly resolve this conflict?
Normally, I would just commit to the tip of the rebase branch, but it is a throw away. I'm just trying to handle conflicts ahead of time, so that when I sync up with that feature team, we minimize the time it takes. Make sense?
To simply remove all previous
rerere
resolutions, runrm -rf .git/rr-cache
to remove the cache.For a specific merge, you can tell
rerere
to forget the recorded resolution by re-executing the merge and allowingrerere
to apply its recorded resolution in the work tree.You can check out
a'
and then do agit merge b
to get back into that situation (you'll probably be in a checkout of a detached head since you specified the commit hash ofa'
, so be aware that you're not on a branch).Then use
git rerere forget FILE-WITH-BAD-MERGE
where to specify the file whose recorded conflict resolution should be forgetten.(From the Git documentation for git-rerere.)