# [PATCH] git-revert with conflicts to behave as git-merge with conflicts

5 messages from 2006-10-12 to 2006-10-13. Participants: Luben Tuikov, Junio C Hamano.
Thread: https://gitlist.dev/t/5908

## Luben Tuikov, 2006-10-12 21:52

Subject: [PATCH] git-revert with conflicts to behave as git-merge with conflicts
Message-ID: <20061012215242.16419.qmail@web31810.mail.mud.yahoo.com>
URL: https://gitlist.dev/e/20061012215242.16419.qmail%40web31810.mail.mud.yahoo.com

```
In a busy project, reverting a commit almost always results
in a conflict between one or more files (depending on the
commit being reverted).  It is useful to record this
conflict in the commit-to-be message of the resulting commit
(after the resolve).  The process now becomes:

git-revert <SHA-1>
<git complains and prints failed automatic>
<user manually resolves>
git-update-index <resolved files>
git-commit -s

And the commit message is now a merge of the revert commit
message and the conflict commit message, giving the user a
chance to edit it or add more information:
---cut---
Revert "title of reverted commit"

This reverts commit <SHA-1>

Conflicts:

    <filename>
    ...
---cut---

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
---
 git-commit.sh |    4 ++--
 git-revert.sh |   11 ++++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/git-commit.sh b/git-commit.sh
index 4bd0e46..81c3a0c 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -441,7 +441,7 @@ then
 elif test "$use_commit" != ""
 then
 	git-cat-file commit "$use_commit" | sed -e '1,/^$/d'
-elif test -f "$GIT_DIR/MERGE_HEAD" && test -f "$GIT_DIR/MERGE_MSG"
+elif test -f "$GIT_DIR/MERGE_MSG"
 then
 	cat "$GIT_DIR/MERGE_MSG"
 elif test -f "$GIT_DIR/SQUASH_MSG"
@@ -607,7 +607,7 @@ then
 	commit=$(cat "$GIT_DIR"/COMMIT_MSG | git-commit-tree $tree $PARENTS) &&
 	rlogm=$(sed -e 1q "$GIT_DIR"/COMMIT_MSG) &&
 	git-update-ref -m "$rloga: $rlogm" HEAD $commit "$current" &&
-	rm -f -- "$GIT_DIR/MERGE_HEAD" &&
+	rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" &&
 	if test -f "$NEXT_INDEX"
 	then
 		mv "$NEXT_INDEX" "$THIS_INDEX"
diff --git a/git-revert.sh b/git-revert.sh
index 4fd81b6..2e23cf4 100755
--- a/git-revert.sh
+++ b/git-revert.sh
@@ -145,9 +145,18 @@ git-read-tree -m -u --aggressive $base $
 result=$(git-write-tree 2>/dev/null) || {
     echo >&2 "Simple $me fails; trying Automatic $me."
     git-merge-index -o git-merge-one-file -a || {
+	    mv -f .msg .git/MERGE_MSG
+	    {
+		echo '
+Conflicts:
+'
+		git ls-files --unmerged |
+		sed -e 's/^[^	]*	/	/' |
+		uniq
+	    } >>"$GIT_DIR/MERGE_MSG"
 	    echo >&2 "Automatic $me failed.  After resolving the conflicts,"
 	    echo >&2 "mark the corrected paths with 'git-update-index <paths>'"
-	    echo >&2 "and commit with 'git commit -F .msg'"
+	    echo >&2 "and commit the result."
 	    case "$me" in
 	    cherry-pick)
 		echo >&2 "You may choose to use the following when making"
-- 
1.4.3.rc2.g6f09-dirty


```

## Junio C Hamano, 2006-10-12 22:27

Subject: Re: [PATCH] git-revert with conflicts to behave as git-merge with conflicts
Message-ID: <7vejtdkw4t.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vejtdkw4t.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20061012215242.16419.qmail@web31810.mail.mud.yahoo.com>

```
Luben Tuikov <ltuikov@yahoo.com> writes:

> --- a/git-commit.sh
> +++ b/git-commit.sh
> @@ -441,7 +441,7 @@ then
>  elif test "$use_commit" != ""
>  then
>  	git-cat-file commit "$use_commit" | sed -e '1,/^$/d'
> -elif test -f "$GIT_DIR/MERGE_HEAD" && test -f "$GIT_DIR/MERGE_MSG"
> +elif test -f "$GIT_DIR/MERGE_MSG"
>  then
>  	cat "$GIT_DIR/MERGE_MSG"
>  elif test -f "$GIT_DIR/SQUASH_MSG"

If you rely on MERGE_MSG then you would need to clean it after
commit is done.  Currently it does not and checks MERGE_HEAD,
and cleans up MERGE_HEAD when it is done.  MERGE_MSG is not
cleaned.

```

## Luben Tuikov, 2006-10-12 23:15

Subject: Re: [PATCH] git-revert with conflicts to behave as git-merge with conflicts
Message-ID: <20061012231503.78452.qmail@web31803.mail.mud.yahoo.com>
URL: https://gitlist.dev/e/20061012231503.78452.qmail%40web31803.mail.mud.yahoo.com
In-Reply-To: <7vejtdkw4t.fsf@assigned-by-dhcp.cox.net>

```
--- Junio C Hamano <junkio@cox.net> wrote:
> Luben Tuikov <ltuikov@yahoo.com> writes:
> 
> > --- a/git-commit.sh
> > +++ b/git-commit.sh
> > @@ -441,7 +441,7 @@ then
> >  elif test "$use_commit" != ""
> >  then
> >  	git-cat-file commit "$use_commit" | sed -e '1,/^$/d'
> > -elif test -f "$GIT_DIR/MERGE_HEAD" && test -f "$GIT_DIR/MERGE_MSG"
> > +elif test -f "$GIT_DIR/MERGE_MSG"
> >  then
> >  	cat "$GIT_DIR/MERGE_MSG"
> >  elif test -f "$GIT_DIR/SQUASH_MSG"
> 
> If you rely on MERGE_MSG then you would need to clean it after
> commit is done.  Currently it does not and checks MERGE_HEAD,
> and cleans up MERGE_HEAD when it is done.  MERGE_MSG is not
> cleaned.

It is cleaned in the lines of the patch you deleted, the section
just after the "elif" above:

@@ -607,7 +607,7 @@ then
        commit=$(cat "$GIT_DIR"/COMMIT_MSG | git-commit-tree $tree $PARENTS) &&
        rlogm=$(sed -e 1q "$GIT_DIR"/COMMIT_MSG) &&
        git-update-ref -m "$rloga: $rlogm" HEAD $commit "$current" &&
-       rm -f -- "$GIT_DIR/MERGE_HEAD" &&
+       rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" &&
        if test -f "$NEXT_INDEX"
        then
                mv "$NEXT_INDEX" "$THIS_INDEX"

   Luben

```

## Junio C Hamano, 2006-10-13 00:07

Subject: Re: [PATCH] git-revert with conflicts to behave as git-merge with conflicts
Message-ID: <7vvempjcwy.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vvempjcwy.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20061012231503.78452.qmail@web31803.mail.mud.yahoo.com>

```
Luben Tuikov <ltuikov@yahoo.com> writes:

>> If you rely on MERGE_MSG then you would need to clean it after
>> commit is done.  Currently it does not and checks MERGE_HEAD,
>> and cleans up MERGE_HEAD when it is done.  MERGE_MSG is not
>> cleaned.
>
> It is cleaned in the lines of the patch you deleted, the section
> just after the "elif" above:

Ok, so I can apply that original one with your 'Oops' rolled
into one patch?

```

## Luben Tuikov, 2006-10-13 00:31

Subject: Re: [PATCH] git-revert with conflicts to behave as git-merge with conflicts
Message-ID: <20061013003120.98769.qmail@web31813.mail.mud.yahoo.com>
URL: https://gitlist.dev/e/20061013003120.98769.qmail%40web31813.mail.mud.yahoo.com
In-Reply-To: <7vvempjcwy.fsf@assigned-by-dhcp.cox.net>

```
--- Junio C Hamano <junkio@cox.net> wrote:
> Luben Tuikov <ltuikov@yahoo.com> writes:
> 
> >> If you rely on MERGE_MSG then you would need to clean it after
> >> commit is done.  Currently it does not and checks MERGE_HEAD,
> >> and cleans up MERGE_HEAD when it is done.  MERGE_MSG is not
> >> cleaned.
> >
> > It is cleaned in the lines of the patch you deleted, the section
> > just after the "elif" above:
> 
> Ok, so I can apply that original one with your 'Oops' rolled
> into one patch?

Yes please.

    Luben

```
