私は今まで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
はかんたんで便利なんですが・・自分自身ステップアップしなくてはいけないので・・!

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

にほんブログ村
コメント