GitHubでの3種類のマージの仕方

GitHub上でマージの仕方が3種類あることを知り、それぞれどういう状態になるのかというのを学んだのでまとめる。

目次

3つのマージ

普段何気なくマージしてたけど、実は方法は3つあった。
それがこちら。
右のタブを押すと出現する。

マージの方法3種類

普段はこの中の「create a merge commit」をやっていた。

マージ後の状態

ではそれぞれの方法でマージした後、一体どうなるのか。

説明するより図で見た方がきっと早い。
ということで作図した。

マージ後の状態

まず、状態の確認から。
masterからブランチを切ってY, Zとコミットが作られている。
その間にmasterはXというコミットが作られている。
コンフリクトはないものとする。

Create a merge commit

これがデフォルトで設定されているためよく見慣れている。
この場合、マージされた際にマージコミットMが生成される。
元のブランチの状態も全て残る。

この時のコミットメッセージはデフォルトだと「Merge pull request 
#{PR番号} from {ブランチ名}」となる。

Create a merge commit

元のブランチの状態もコミットログも全て残す正直者。

Squash and merge

この場合、マージコミットMは同様に生成されるものの、ブランチのそれまでの複数のコミットは一つのマージコミットにまとめられる。
かつ、元のブランチの情報は残らない。

マージコミットのコミットメッセージはデフォルトだと「{PRタイトル} (#{PR番号})」となる。

Squash and merge

元のブランチの状態は残さないが、コミットを一つにまとめるまとめ上手。

Rebase and merge

この場合、マージコミットは生成されない。
かつ、元のブランチの情報も残らない。

ブランチで作業していたにも関わらず、
あたかも「最初からmasterでコミットし続けてましたよ?」
と見えるような一番しれっとしたマージ方法。

Rebase and merge

元のブランチの状態は残さず、手柄を全て自分の物にするかのようなあくどいやつ。(あくまで個人のイメージです。)

設定で表示を変えられる

GitHubの「Settings > Options」から3種類のうち、どれを表示させられるか設定できる。

Merge方法設定

これで間違って別の方法でマージしちゃった。。。ということが無くなる。

どう使い分けるの?

元のブランチの状態を見たいなら「create a merge commit」一択。
元のブランチの情報が必要ないのなら、あとはコミットログを残すかどうかで
「Squash and merge」か「Rebase and merge」を決めるという感じかな。

ただ、結局のところチームで方針決めてそれに従うことになる。

個人的にはデフォルトのcreate a merge commitが一番好きだ。
ただこいつの弱点は、チーム開発でそれぞれがブランチ切ったりしてるとmasterブランチがかなり見づらくなること。

ちなみにうちのチームでは「Squash and merge」を採用している。
masterの状態が常に1プルリクに対して1コミットとなるのでこれが一番masterの状態がスッキリする。

個人的には「Rebase and merge」がいまいちメリットが分からない。。
masterのコミットの状態がどんどん増えるのに、情報少なくなるだけな気がする。。

ここは結構人によって好き好みが分かれる。
実際うちの開発チームでもブランチ情報残したい派とmasterスッキリさせたい派が半々くらいだった。
宗教戦争にならないように注意が必要。

Gitは色んな使い方があるからちょっとずつ覚えていきたい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次