The assumtion that the new HEAD is the rewritten old head is wrong. The new HEAD is the (maybe rewritten) last commit in the list. Signed-off-by: Jörg Sommer <joerg@xxxxxxxxxxxx> --- git-rebase--interactive.sh | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 8aa7371..dec18a3 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -20,6 +20,7 @@ require_work_tree DOTEST="$GIT_DIR/.dotest-merge" TODO="$DOTEST"/git-rebase-todo DONE="$DOTEST"/done +LAST_SHA1="$DOTEST"/last_sha1 MSG="$DOTEST"/message SQUASH_MSG="$DOTEST"/message-squash REWRITTEN="$DOTEST"/rewritten @@ -251,6 +252,7 @@ do_next () { pick|p) comment_for_reflog pick + echo $sha1 > "$LAST_SHA1" mark_action_done pick_one $sha1 || die_with_patch $sha1 "Could not apply $sha1... $rest" @@ -258,6 +260,7 @@ do_next () { edit|e) comment_for_reflog edit + echo $sha1 > "$LAST_SHA1" mark_action_done pick_one $sha1 || die_with_patch $sha1 "Could not apply $sha1... $rest" @@ -280,6 +283,7 @@ do_next () { has_action "$DONE" || die "Cannot 'squash' without a previous commit" + echo $sha1 > "$LAST_SHA1" mark_action_done make_squash_message $sha1 > "$MSG" case "$(peek_next_command)" in @@ -333,11 +337,12 @@ do_next () { test -f "$DOTEST"/current-commit && current_commit=$(cat "$DOTEST"/current-commit) && git rev-parse HEAD > "$REWRITTEN"/$current_commit - if test -f "$REWRITTEN"/$OLDHEAD + last_sha1=$(git rev-parse $(cat "$LAST_SHA1")) + if test -f "$REWRITTEN"/$last_sha1 then - NEWHEAD=$(cat "$REWRITTEN"/$OLDHEAD) + NEWHEAD=$(cat "$REWRITTEN"/$last_sha1) else - NEWHEAD=$OLDHEAD + NEWHEAD=$last_sha1 fi else NEWHEAD=$(git rev-parse HEAD) -- 1.5.4.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html