summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Johannes Schindelin <Johannes.Schindelin@gmx.de>2007-06-25 18:58:28 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2007-06-26 18:58:59 -0700
commit68a163c9b483ae352fcfee8c4505d113213daa73 (patch)
treea2f269413367d19626c13915811a6ff4babf97fd
parentrebase -i: several cleanups (diff)
downloadtgif-68a163c9b483ae352fcfee8c4505d113213daa73.tar.xz
rebase -i: provide reasonable reflog for the rebased branch
If your rebase succeeded, the HEAD's reflog will still show the whole mess, but "<branchname>@{1}" now shows the state _before_ the rebase, so that you can reset (or compare) the original and the rebased revisions more easily. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xgit-rebase--interactive.sh10
-rwxr-xr-xt/t3404-rebase-interactive.sh4
2 files changed, 12 insertions, 2 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index a81432c0a5..f0f2457975 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -151,8 +151,14 @@ do_next () {
esac
test -s "$TODO" && return
- HEAD=$(git rev-parse HEAD)
- HEADNAME=$(cat "$DOTEST"/head-name)
+ comment_for_reflog finish &&
+ HEADNAME=$(cat "$DOTEST"/head-name) &&
+ OLDHEAD=$(cat "$DOTEST"/head) &&
+ SHORTONTO=$(git rev-parse --short $(cat "$DOTEST"/onto)) &&
+ NEWHEAD=$(git rev-parse HEAD) &&
+ message="$GIT_REFLOG_ACTION: $HEADNAME onto $SHORTONTO)" &&
+ git update-ref -m "$message" $HEADNAME $NEWHEAD $OLDHEAD &&
+ git symbolic-ref HEAD $HEADNAME &&
rm -rf "$DOTEST" &&
warn "Successfully rebased and updated $HEADNAME."
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 19a3a8e813..9f12bb9321 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -99,6 +99,10 @@ test_expect_success 'rebase on top of a non-conflicting commit' '
test $(git rev-parse I) = $(git rev-parse HEAD~2)
'
+test_expect_success 'reflog for the branch shows state before rebase' '
+ test $(git rev-parse branch1@{1}) = $(git rev-parse original-branch1)
+'
+
test_expect_success 'exchange two commits' '
FAKE_LINES="2 1" git rebase -i HEAD~2 &&
test H = $(git cat-file commit HEAD^ | tail -n 1) &&