git rebaseと仲良くなろう~part1

  • 81
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

rebaseしてください〜

PullRequestを送りました報告をしたら
このままmergeできないので、rebaseしてもういっかいPUSHしてくださいと言われました。

rebaseしたことなくて、ガクガク(((n;‘Д‘))ηナンダカコワイワァ

練習用のレポジトリーでやってみよう

練習用のレポジトリーなら、どんなことが起きても怖くない!
初心者でも分かる!git rebaseの使い方を解説します
を参考に、まずはmergerebaseの履歴の残り方の違いを理解することとする

mergeとrebaseの違いを確認しよう

mergeの確認

手順

  1. masterとdevelopブランチを、参考サイトのHEADとTOPICに見立てて進める
  2. masterで A、B、Cコミットを作る
  3. developブランチを作る
  4. developブランチでDコミットを作る
  5. masterでEコミットを作る
  6. developブランチにmasterをmergeし、コミット履歴を確認する

詳細

1.masterでA、B、Cコミットを作った

% git log --oneline
8ed1455 commit C
73c200d commit B
9110548 commit A

2.developブランチ作った

% git checkout -b develop

3.developでDコミットを作った

% git log --oneline
a095b4a commit D   # 追加したコミット
8ed1455 commit C
73c200d commit B
9110548 commit A

4.masterでEコミットを作る

% git log --oneline
71c87eb commit E
8ed1455 commit C
73c200d commit B
9110548 commit A

5.mergeする

% git checkout develop
% git merge master

6.履歴を確認する

% git log --oneline
be3bfe5 Merge branch 'master' into develop
71c87eb commit E
a095b4a commit D
8ed1455 commit C
73c200d commit B
9110548 commit A

rebaseの確認

手順

  1. masterとdevelopブランチを、参考サイトのHEADとTOPICに見立てて進める
  2. masterで A、B、Cコミットを作る
  3. developでDコミットを作る
  4. masterでEコミットを作る
  5. developブランチにmasterをrebaseし、コミット履歴を確認する

詳細

0〜3までの手順は、mergeのと同じなので省略。

rebase前のcommit logは下記。
master

71c87eb commit E
8ed1455 commit C
73c200d commit B
9110548 commit A

develop

0378896 commit D
8ed1455 commit C
73c200d commit B
9110548 commit A

rebaseする

% git checkout develop && git rebase master

commit logを確認する

68be895 commit D
71c87eb commit E
8ed1455 commit C
73c200d commit B
9110548 commit A

mergeとrebase のcommit logの違い

ぱっとみ、違いは
mergeは、時間軸で履歴が並んでいて、さらに
mergeのコミットログが存在する。

rebaseは、developのcommit logはそのままで
masterとの差分 commit Eだけが後から足されているように見える。
が、commit D のコミットIDが元々developのものと違うのだ。
(rebase前のコミットID:0378896 / rebase 後のコミットID:68be895)

なるほど〜
初心者でも分かる!git rebaseの使い方を解説しますで図の通り

A - B - C - E - D ではなく、
A - B - C - E - D` の意味はこれだった。

merge のコミットIDを確かめてみると
commit DのコミットIDは、merge前とmerge後と同一であった。(コミットID:a095b4a)

A - B - C - D - E - F
F: merge コミットログ
の意味はこれだった。