読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の壮年PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

rebaseとrebase -iの挙動は違うっぽい

git

どっちの挙動も間違ってないだろうってのはわかるんだけど、それぞれで挙動が違ってるのは悲しい。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

軽くソース読んでみてだいぶ違うっぽいってのはわかったけど、本質的にどこが異なるのかは追いきれなかった。