Web上でPRをマージする際に選択可能な3つのマージ方法をまとめました。
Create a merge commit
- ファストフォワード無効オプション適用のマージになる
git merge --no-ff
- マージコミットが生成される
- マージコミットの親コミットは2つ(分岐元の最新と分岐先の最新)
- 分岐先のコミットは分岐元に取り込まれる
- 分岐先ブランチが消えてもコミットは残る
Rebase and merge
- 分岐先のコミットと同じ内容のクローンコミットが生成されて、分岐元にマージされる
- 新しいコミットは分岐元の最新コミットからの分岐になるので、マージされるとファストフォワードになる
- 履歴は一本になる
Squash and merge
- 分岐先のコミットを1つにまとめたコミットが生成されて、分岐元にマージされる
- 新しいコミットは分岐元の最新コミットからの分岐になるので、マージされるとファストフォワードになる
- 1PR1コミットになる
- コミッタが分岐元にマージした人になる(GitHubだとnoreply@gihub.com)
注意点
- develop -> main などの同じ分岐元、分岐先のマージを複数回行うような場合には、RebaseやSquashは使わない
- 差分を含むコミットが毎回作り直される為、毎回同じコミットが差分として検出されてしまう
- main -> develop にマージしていない場合はコンフリクトが多発する
参考
- https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github#rebasing-and-merging-your-commits
- https://git-scm.com/docs/git-merge#_fast_forward_merge
- https://qiita.com/ko-he-8/items/94e872f2154829c868df#rebase-and-merge
- https://zenn.dev/noraworld/articles/github-merge-options