最近実務で初めてrebaseを使って「????」となったので調べました。
以下の動画、記事が分かりやすかったです。
具体例
今回は動画から引用してこのような場合を考えてみます。
- m2まで作業が進んでいるmasterブランチからfeatureブランチへcheckout
- featureブランチでf1をコミット
- masterブランチにcheckoutしてm3をコミット
- 再度featureブランチにcheckoutしてf2をコミット
ここまでの各ブランチの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
は使わないように注意しましょう。