>From 53262bc8a7a3ec9d9a6b0e8ecaaea598257b87fe Mon Sep 17 00:00:00 2001 From: Uwe Storbeck Date: Fri, 14 Mar 2014 00:28:33 +0100 Subject: [PATCH] git-rebase--interactive: replace echo by printf to avoid shell dependent behavior. When your system shell (/bin/sh) is a dash control sequences in strings get interpreted by the echo command. A commit message which ends with the string '\n' may result in a garbage line in the todo list of an interactive rebase which causes the rebase to fail. To reproduce the behavior (with dash as /bin/sh): mkdir test && cd test && git init echo 1 >foo && git add foo git commit -m"this commit message ends with '\n'" echo 2 >foo && git commit -a --fixup HEAD git rebase -i --autosquash --root Now the editor opens with garbage in line 3 which has to be removed or the rebase fails. --- git-rebase--interactive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index a1adae8..3ffe14c 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -749,7 +749,7 @@ rearrange_squash () { ;; esac done - echo "$sha1 $action $prefix $rest" + printf "%s %s %s %s\n" "$sha1" "$action" "$prefix" "$rest" # if it's a single word, try to resolve to a full sha1 and # emit a second copy. This allows us to match on both message # and on sha1 prefix -- 1.9.0