Re: [PATCH 00/12] Towards a better merge resolution support
- From
Alex Riesen <raa.lkml@gmail.com>
- Date
- Sep 1, 2008, 11:34 UTC
- Message-ID
- <20080901113416.GA8610@blimp.localhost>
- In-Reply-To
- <7vod38w3q6.fsf@gitster.siamese.dyndns.org>
Junio C Hamano, Mon, Sep 01, 2008 12:38:25 +0200:
Show 12 quoted lines
> Alex Riesen <raa.lkml@gmail.com> writes: > > > ... IOW, copy the commit > > resolution from some other merge commit. Maybe can be a way to use > > rerere mechanism with that? > > If you know which merge I did you want to steal from, you can prime your > rerere database by pretending to be me, doing the merge. Something like: > > $ git checkout $merge^1 ;# detach to the parent of merge > $ git merge $merge^2 ;# pretend you were me to redo it > $ git diff -R $merge | git apply --index ;# and get what I did
I ended up using
$ git checkout Merge^1
$ git merge Merge^2
$ git diff -R Merge | git apply
$ git diff -R Merge --name-only -z | git update-index -z --stdin
$ git rerereJust git apply --index complained about the files missing from the index:
$ git tag Merge c5e2ace70271b481632aaf987361027ca4592df6
$ gco Merge^1
Previous HEAD position was c5e2ace... Merge branch 'jc/better-conflict-resolution' into next
HEAD is now at 2392877... Merge branch 'master' into next
$ git merge Merge^2
Auto-merging Documentation/config.txt
Auto-merging Documentation/git-checkout.txt
CONFLICT (content): Merge conflict in Documentation/git-checkout.txt
Auto-merging builtin-checkout.c
CONFLICT (content): Merge conflict in builtin-checkout.c
Auto-merging builtin-merge-recursive.c
Auto-merging t/t6023-merge-file.sh
Auto-merging t/t7201-co.sh
CONFLICT (content): Merge conflict in t/t7201-co.sh
Auto-merging xdiff-interface.c
Auto-merging xdiff-interface.h
Recorded preimage for 'Documentation/git-checkout.txt'
Recorded preimage for 'builtin-checkout.c'
Recorded preimage for 't/t7201-co.sh'
Automatic merge failed; fix conflicts and then commit the result.
$ git diff -R Merge |git apply --index
error: Documentation/git-checkout.txt: does not exist in index
error: builtin-checkout.c: does not exist in index
error: t/t7201-co.sh: does not exist in index> $ git rerere ;# have rerere record the resolution
Well, it works, but it's a bit of work and hard to automate (needs a working tree). An option to merge:
$ git merge <branch>
conflict ... investigate ... find a resolution in <resolution>
$ git reset --hard
$ git merge --rerere <resolution> branch
check... Ok.
$ git commitor rerere:
$ git merge <branch>
conflict ... investigate ... find a resolution in <resolution>
$ git rerere <resolution>
$ git reset --hard
$ git merge <branch>
check... Ok.
$ git commitThese could be more convenient.