git merge 時は必ずマージコミットを作るようにする

git merge でマージする時、Fast-Forward なマージだとマージコミットが作られない。

Fast-Forward とは、取り込もうとしているブランチの方が、手元のブランチよりも新しい状態であること。「手元のブランチより新しいブランチを取り込むだけだから、わざわざ『追い付きました!』報告みたいなコミットは作らなくてもいいよね」という理屈で、デフォルトではマージコミットを作らない設定になっている。

しかし、マージ作業も立派な「作業」であり、マージに問題があった時に追跡しづらくなるので、基本的にはマージコミットを作るようにしたい。

通常のコマンドでマージコミットを必ず作るようにするには、以下のように --no-ff オプションを付ければ良い。

# 現在のローカルブランチに feature/hoge ブランチをマージする
# Fast-Forward な関係でも必ずマージコミットを作る
$ git merge feature/hoge --no-ff

しかし、これを書き忘れてしまうこともあるだろうから、デフォルトで --no-ff な設定になるよう、.gitconfig に追記してしまおう。

ターミナルで以下のコマンドを叩く。

$ git config --global --add merge.ff false
$ git config --global --add pull.ff only

すると、~/.gitconfig に以下のような情報が追記されている。

# .gitconfig

[merge]
    ff = false
[pull]
    ff = only

1行目のコマンドの方で、「必ず git merge --no-ff する」と設定している。

2行目のコマンドは、git pull した際のマージでコミットを作らないようにする設定。これを設定しておかないと、git pull する度に余計なマージコミットができてしまう。この設定をしておけば、Fast-Forward な場合はマージコミットが作られない。