rebaseを使ってmainの変更を統合
最初に
mergeとrebaseコマンドは両方とも、変更を1つのブランチから別のブランチに統合することを目的に設計されています。mainに私が作業したブランチを適用させる時は、mergeを主に使いました。
しかし私が作業したブランチにmainを適用させる時はどうすれば良か。その時、rebaseをつかいます。
rebase VS merge
(現在状況)
仮定1.メインブランチとサブブランチがすべて変更された。
仮定2.B5とA4が衝突している
mergeなら?
git checkout main
git merge
merge commitができちゃいます!
rebaseなら?
git checkout main
git rebase
rebaseコマンドは、文字通りre-base、すなわちブランチのbaseを移すという意味です。
この時、baseは現在私が作業しているブランチと合わせようとするブランチの共通先祖を意味です。
mergeコマンドを使用したときのようなmerge commitを生成せずにbranchを併合するためには
branchのroot commitが変わらなければならないです。 このような作業を可能にするのがrebaseコマンドです。
mergeとrebaseの違いを調べるために、同じようにmainでrebaseをおこないました。
しかし、実はmasterでrebaseをすることは避けなければならないです。 masterをrebaseするとコミットも新しく書き、整列も新しくするので既存のコミットツリーが完全に変わります。
(masterはむやみに触ってはいけないことを留意しましょう!)
rebaseの活用例
1.ブランチの作業中にmainブランチが変更され、マージしようとしましたが、衝突する時に
私のブランチでmainブランチをrebaseしてとmainにmergeします。
これではmerge commitが出ないです。
- 変更されたmainブランチの内容を現在の私の作業ブランチにインポートしたい場合。
(現在状況)
git checkout sub
git rebase main
(rebase後)
最後に
まとめると、rebaseは合わせようとするbranchの最新commitにbaseを移すコマンドです!
A4をbaseに変えてあげた
要らないcommit mergeが生じず、commit historyがきれいになります。
ただし、rebaseはもし途中で衝突がある場合、その間にあるコミットのすべての衝突を修正しなければならない場合があります。
Discussion