Skip to main content

rebase完全に理解した

最近実務で初めてrebaseを使って「????」となったので調べました。

以下の動画、記事が分かりやすかったです。

具体例

今回は動画から引用してこのような場合を考えてみます。

  1. m2まで作業が進んでいるmasterブランチからfeatureブランチへcheckout
  2. featureブランチでf1をコミット
  3. masterブランチにcheckoutしてm3をコミット
  4. 再度featureブランチにcheckoutしてf2をコミット スクリーンショット 2020-10-25 10.58.28.png

ここまでの各ブランチのlog

masterブランチのlog

m3
m2
m1

featureブランチのlog

f2
f1
m2
m1

merge vs rebase

ここからfeatureブランチにて、masterブランチをmerge, rebaseするとそれぞれどうなるか見ていきます。

git merge masterのlog

f2
m3
f1
m2
m1

git rebase masterのlog

f2
f1
m3
m2
m1

mergeでは時系列に沿ってそのまま差分を統合しているのに対し、rebaseではfeatureブランチの先端がmasterで置き換えられています。 rebaseを用いるとコミット履歴がすっきりしますね。

rebaseのアンチパターン

この記事から引用します。

リベースの特徴を理解できたら、次に最も重要なことは、実行してはいけないときを知ることです。git rebase の黄金律は、リベースを public ブランチでは決して使用しないことです。

masterブランチにて、自分の作業ブランチをrebaseしてしまうとmasterのコミット履歴が書き換えられてしまいます。 このように、他の人にも共有済みのブランチでrebaseは使わないように注意しましょう。