From ea69619cd1081359e73e597a76fcf6444f222f2d Mon Sep 17 00:00:00 2001 From: Csaba Henk Date: Fri, 27 May 2011 16:13:02 -0400 Subject: [PATCH 1/2] rebase: create HEAD reflog entry when aborting When we abort a rebase, we return to the original value of HEAD. Failing to write a reflog entry means we create a gap in the reflog (which can cause "git show HEAD@{5.minutes.ago}" to issue a warning). Plus having the extra entry makes the reflog easier to follow for a human. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- git-rebase.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-rebase.sh b/git-rebase.sh index 7a54bfc61..57cbe49ea 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -332,7 +332,7 @@ abort) read_basic_state case "$head_name" in refs/*) - git symbolic-ref HEAD $head_name || + git symbolic-ref -m "rebase: aborting" HEAD $head_name || die "Could not move back to $head_name" ;; esac From 53f2ffa80c1c5ea5feb9fbe7432bf7106cf3047e Mon Sep 17 00:00:00 2001 From: Jeff King Date: Fri, 27 May 2011 16:16:14 -0400 Subject: [PATCH 2/2] rebase: write a reflog entry when finishing When we finish a rebase, our detached HEAD is at the final result. We update the original branch ref with this result, and then point the HEAD symbolic ref at the updated branch. We write a reflog for the branch update, but not for the update of HEAD. Because we're already at the final result on the detached HEAD, moving to the branch actually doesn't change our commit sha1 at all. So in that sense, a reflog entry would be pointless. However, humans do read reflogs, and an entry saying "rebase finished: returning to refs/heads/master" can be helpful in understanding what is going on. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- git-rebase--interactive.sh | 4 +++- git-rebase.sh | 4 +++- t/t3404-rebase-interactive.sh | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 41ba96aeb..65690af89 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -510,7 +510,9 @@ do_next () { refs/*) message="$GIT_REFLOG_ACTION: $head_name onto $shortonto" && git update-ref -m "$message" $head_name $newhead $orig_head && - git symbolic-ref HEAD $head_name + git symbolic-ref \ + -m "$GIT_REFLOG_ACTION: returning to $head_name" \ + HEAD $head_name ;; esac && { test ! -f "$state_dir"/verbose || diff --git a/git-rebase.sh b/git-rebase.sh index 57cbe49ea..d7855ea1c 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -153,7 +153,9 @@ move_to_original_branch () { message="rebase finished: $head_name onto $onto" git update-ref -m "$message" \ $head_name $(git rev-parse HEAD) $orig_head && - git symbolic-ref HEAD $head_name || + git symbolic-ref \ + -m "rebase finished: returning to $head_name" \ + HEAD $head_name || die "Could not move back to $head_name" ;; esac diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 7d8147bb9..47c8371c7 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -317,7 +317,7 @@ test_expect_success '--continue tries to commit' ' ' test_expect_success 'verbose flag is heeded, even after --continue' ' - git reset --hard HEAD@{1} && + git reset --hard master@{1} && test_tick && test_must_fail git rebase -v -i --onto new-branch1 HEAD^ && echo resolved > file1 &&