Nao000のぶろぐ

蝶を追っている少年になりたい

git merge --squash ってなんすか。

存在は知っていたのですが使ってこなかったです。

作業ブランチがこまめにコミットされていたとします。リリースブランチに作業ブランチをマージするときに squash オプションを使うかで違いが出てきます。

squash オプションを使わないとき

僕が普段使っているマージです。feature ブランチからマージされていることが見た目でわかります。

feat_1 ---- feat_2 ---------------- feat_3 ( main branch )
                  |                             /
                  \ ---- feat_3_1---- feat_3_2 ( feature branch )

squash オプションを使うとき

こちらが squash マージしたときのグラフの様子です。あたかも main ブランチが1回のコミットで feature_3 の機能を実装したかのようになっています。

feat_1 ---- feat_2 ---------------- feat_3 ( main branch )
                  |
                  \ ---- feat_3_1---- feat_3_2 ( feature branch )

おわり

それだけです。 squash マージの場合はグラフはきれいになっていますが、このメリットはいまいち分かりません。

Github の fork みたいに作業用リポジトリが別れている場合に、メインリポジトリの作業ブランチに対して作業用リポジトリの作業ブランチを squash マージする運用にすればメリットはありそうですが、僕の環境では煩雑過ぎて採用はしないです。