DEV Community

d.yoshimitsu
d.yoshimitsu

Posted on

【Git】縮退マージ(degenerate merge)

縮退マージとは

git merge後に新しいマージコミットを作らない、縮退マージという仕組みがあります。

縮退マージされる条件

already up-to-date(すでに最新)と fast-forward(早送り)と呼ばれる2つの縮退(degenerate)シナリオがあります。

  • Already up-to-date
    他のブランチ(のHEAD)からのコミットが全て、すでに対象ブランチに含まれている場合、対象ブランチは「Already up to date.」といわれます。
    これは、たとえ対象ブランチ自身の履歴が更に先に進んでいたとしてもです。結果として、対象ブランチに新しいコミットは追加されません。

  • Fast-forward
    fast-forwardマージは、あなたのブランチのHEADがすでに他のブランチ上にすべて存在している場合に起こります。
    これは、already up-to-dateの逆のケースです。
    あなたのHEADはすでに他のブランチ上に存在しているので、Gitは単にあなたのHEADに他のブランチのコミットを付け足し、HEADを最新の新しいコミットを指すように移動させます。
    この結果、インデックスと作業コピーは最新コミットの状態合わせて変更されます。

fast-forwardマージしたくない場合

--no-ffオプションをつけてください。fast-forward可能な場合でも明示的にマージコミットを作成します。
GitHubでプルリクエストをマージする時にも、--no-ffが使用されています。

Top comments (0)