こんにちは。Яeiです。
今回は、GitHubのマージボタンで選択できる以下の3つの違いについて実際に動かして確認してみました。
・Create a merge commit
・Squash and merge
・Rebase and merge
目次
結論:動作の違いについて
Create a merge commit
まずは準備として、「develop/create」ブランチと「feature/create」ブランチを作成します。
そして、featureブランチにて適当にコミットを3つ作成しプルリクエストを発行します。
この状態で「Create a merge commit」を選択します。
するとdevelopブランチのコミット状態は以下のようになりました。
「Create a merge commit」の名前の通り、マージした際のコミットが新しく出来上がりました。
Squash and merge
まずは準備として、「develop/squash」ブランチと「feature/squash」ブランチを作成します。
そして、featureブランチにて適当にコミットを3つ作成しプルリクエストを発行します。
この状態で「Squash and merge」を選択します。
するとdevelopブランチのコミット状態は以下のようになりました。
一つにコミットがまとまったことが分かります。
Rebase and merge
まずは準備として、「develop/rebase」ブランチと「feature/rebase」ブランチを作成します。
そして、featureブランチにて適当にコミットを3つ作成しプルリクエストを発行します。
この状態で「Rebase and merge」を選択します。
するとdevelopブランチのコミット状態は以下のようになりました。
あたらしくコミットが作成されることなく、リベースされたことが確認できるかと思います。
当記事は以上となります。
コミットに違いがでることがお分かりいただけたかと思います。
どのように運用していくかはプロジェクトの意向に従うのが吉となるかと思いますが、使い分けできると便利なケースも出てくることでしょう。
(どのブランチ戦略を取っているかにもよってくるかと思います)
こまめにコミットをマージして取り込むようなケースの場合は、squashが活きてくると思います。
一方でかなりの量のコミットをまとめてマージするような場合は、squashしてしまうとせっかくの履歴が消えてしまうので不向きだったりします。
迷ったらCreateで良いかなという印象です。
長々とお疲れさまでした。