私は今までmainブランチの取り込みはずっとgit mergeを使ってきました。こっちの方がかんたんだからです・・
でも本当はgit rebaseのがいいんだよな・・と心の隅で思っていたので、これを機会に勉強してみました。

でもgit rebase難しそう・・
git rebaseとは
merge commitを作らずに、ブランチを統合するやり方です。
mergeとrebaseの比較
merge
上記の記事で紹介した、3-way mergeを例にとってみます。
以下では、testブランチをmainに統合したいと思った場合、mergeを使うと、C5というmerge commitが生成されます。

rebase
一方で、git rebaseを使うと、以下のようになります。

いかがでしょうか?
mergeとrebaseを比べてみると、動き方はだいぶ違いますが、C5とC4'の中身は一緒になります。
つまり、Historyだけが違いとしてあります。
どちらがいいのか?
公式ドキュメント(Rebase vs Merge)にもありますが、用途によって使い分けてくださいとのことでした。
実際に公式ドキュメントにあるサンプル(More Interesting Rebases)をやってみたりしたのですが、違いとしては、merge commitが作成されないので、Historyが綺麗という点です。
例えば、こちらは手元でいろいろ実験していた際のスクショです。

86d9: c1から上は公式ドキュメントにあるサンプル(More Interesting Rebases)を手元で再現したもので、rebaseを使っています。
見てわかるように1列で綺麗ですよね。
一方で、8286: fix: midoriからc159: Merge branchまではmergeを使いました。c159はmerge commitですね。よく図で紹介するように分岐しています。
見方によるのかもしれませんが、一般的にrebaseのがよいとされています。たしかにmerge commitというコミットが入ってくるのでHistoryがごちゃっとした印象に見えちゃうのかもしれないです。
まとめ
Historyに関して今まで何も気にしていなかったので、今後rebaseを使っていこうかなと思いました。
mergeはかんたんで便利なんですが・・自分自身ステップアップしなくてはいけないので・・!

にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村



コメント