threads / patch / 8717

patch, 3 partsrebase -i: provide reasonable reflog for the rebased branch

Subject: [PATCH 2/3] rebase -i: provide reasonable reflog for the rebased branch

## tl;dr

One message between Jun 25, 2007 and Jun 25, 2007. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Johannes Schindelin· Jun 25, 2007, 17:58 UTC · lore

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>
---
	Johannes, how about this? ;-)
 git-rebase--interactive.sh    |   10 ++++++++--
 t/t3404-rebase-interactive.sh |    4 ++++
 2 files changed, 12 insertions(+), 2 deletions(-)
Show changes to 2 files +12 −2

git-rebase--interactive.sh, t/t3404-rebase-interactive.sh

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index b95fe86..fb93e13 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 19a3a8e..9f12bb9 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) &&
-- 
1.5.2.2.3172.ge55a1-dirty

← back to recent threads