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 2c517ed..fe53608 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 a64d9d5..02d7e3c 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 e2d85ee..2597d77 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.