どっちの挙動も間違ってないだろうってのはわかるんだけど、それぞれで挙動が違ってるのは悲しい。git rebaseの方の挙動は(間違ってないだろうってのは置いておいて)罠だし。
% git --version git version 1.7.9.6 (Apple Git-31.1) ※masterとtopicを準備 % git init Initialized empty Git repository in /private/tmp/iyada/.git/ % echo "1\n2\n3\n4\n5\n6\n7\n1\n2\n3\n4\n5\n6\n7\n" > num.txt % git add num.txt; git commit -m"initial" [master (root-commit) a41e523] initial 1 file changed, 15 insertions(+) create mode 100644 num.txt % echo "A\nB\nC\nD\nE\nF\nG\n1\n2\n3\n4\n5\n6\n7\n1\n2\n3\n4\n5\n6\n7\n" > num.txt % git commit -am"Add alphabets." [master 0c4ac2d] Add alphabets. 1 file changed, 7 insertions(+) % git checkout -b topic master~ Switched to a new branch 'topic' % echo "1\n2\n3\n4\n5\n6\n7\n1\n2\n3\n<<Rewrite>>\n5\n6\n7\n" > num.txt % git commit -am"Rewrite the last '4'." [topic 450bd3c] Rewrite the last '4'. 1 file changed, 1 insertion(+), 1 deletion(-) ※topicからmasterへrebaseした場合 % git rebase master First, rewinding head to replay your work on top of it... Applying: Rewrite the last '4'. % cat num.txt A B C D E F G 1 2 3 <<Rewrite>> 5 6 7 1 2 3 4 5 6 7 ※topicからmasterへrebase -iした場合 % git reset --hard ORIG_HEAD HEAD is now at 450bd3c Rewrite the last '4'. % git rebase -i master Successfully rebased and updated refs/heads/topic. % cat num.txt A B C D E F G 1 2 3 4 5 6 7 1 2 3 <<Rewrite>> 5 6 7
軽くソース読んでみてだいぶ違うっぽいってのはわかったけど、本質的にどこが異なるのかは追いきれなかった。