git-revert with conflicts to behave as git-merge with conflicts
[gitweb.git] / git-revert.sh
index 63d201be1bf810499cfeb7aecbc23ec15e171bb7..066e67753e939c3697082d48d6caee6e4b303796 100755 (executable)
@@ -84,7 +84,7 @@ revert)
                s/^[^ ]* /Revert "/
                s/$/"/'
        echo
-       echo "This reverts $commit commit."
+       echo "This reverts commit $commit."
        test "$rev" = "$commit" ||
        echo "(original 'git revert' arguments: $@)"
        base=$commit next=$prev
@@ -93,6 +93,7 @@ revert)
 cherry-pick)
        pick_author_script='
        /^author /{
+               s/'\''/'\''\\'\'\''/g
                h
                s/^author \([^<]*\) <[^>]*> .*$/\1/
                s/'\''/'\''\'\'\''/g
@@ -136,12 +137,22 @@ esac >.msg
 # $prev and $commit on top of us (when cherry-picking or replaying).
 
 echo >&2 "First trying simple merge strategy to $me."
-git-read-tree -m -u $base $head $next &&
+git-read-tree -m -u --aggressive $base $head $next &&
 result=$(git-write-tree 2>/dev/null) || {
     echo >&2 "Simple $me fails; trying Automatic $me."
     git-merge-index -o git-merge-one-file -a || {
-           echo >&2 "Automatic $me failed.  After fixing it up,"
-           echo >&2 "you can use \"git commit -F .msg\""
+           mv -f .msg "$GIT_DIR/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 the result."
            case "$me" in
            cherry-pick)
                echo >&2 "You may choose to use the following when making"