Teach "am" and "rebase" to mark the original position with ORIG_HEAD
authorJunio C Hamano <gitster@pobox.com>
Mon, 7 Jul 2008 07:16:38 +0000 (00:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Jul 2008 20:12:56 +0000 (13:12 -0700)
"merge" and "reset" leave the original point in history in ORIG_HEAD,
which makes it easy to go back to where you were before you inflict a
major damage to your history and realize that you do not like the result
at all.  These days with reflog, we technically do not need to use
ORIG_HEAD, but it is a handy way nevertheless.

This teaches "am" and "rebase" (all forms --- the vanilla one that uses
"am" as its backend, "-m" variant that cherry-picks, and "--interactive")
to do the same.

The original idea and a partial implementation to do this only for "rebase
-m" was by Brian Gernhardt; this extends on his idea.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-am.sh
git-rebase--interactive.sh
git-rebase.sh

index 2c517ede590c5c3274b03d1c980f9a847cc7d643..fe53608c94a7eda70aebfdf3364802b1a665647f 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -241,6 +241,7 @@ else
                : >"$dotest/rebasing"
        else
                : >"$dotest/applying"
+               git update-ref ORIG_HEAD HEAD
        fi
 fi
 
index a64d9d57ab5943ac4e065866ce0ccd7de5364a9a..02d7e3c7b030a662f283624b898aaa7c49544fdc 100755 (executable)
@@ -549,6 +549,7 @@ EOF
                has_action "$TODO" ||
                        die_abort "Nothing to do"
 
+               git update-ref ORIG_HEAD $HEAD
                output git checkout $ONTO && do_rest
                ;;
        esac
index e2d85eeeab79e60ef46a65cfee1fb4682dd4ba68..2597d777d6fa8e9beb2a660ecdc10366747b4e23 100755 (executable)
@@ -378,7 +378,7 @@ fi
 echo "First, rewinding head to replay your work on top of it..."
 git checkout "$onto^0" >/dev/null 2>&1 ||
        die "could not detach HEAD"
-# git reset --hard "$onto^0"
+git update-ref ORIG_HEAD $branch
 
 # If the $onto is a proper descendant of the tip of the branch, then
 # we just fast forwarded.