git mergeのとき、デフォルトでno-ffになるようにする設定
inabaです。
ブランチのマージ時にマージ対象のブランチでどんな変更があったか知るためにマージコミットが欲しいので--no-ff
(No Fast-forward)オプションをつけていました。
$ git merge --no-ff foobar
ですが、設定でデフォルトをno-ffにできることを知りました。
設定
$ git config --global merge.ff false
上記設定をすることでgit merge foobar
のみでno-ffのマージになります。
$ git merge foobar ... $ git log --graph --oneline * f84d525 Merge branch 'foobar' |\ | * 2d68cba Fix B. |/ * a3159f3 Fix A.
参考サイト: Git - git-merge Documentation
問題
しかし、上記のみだとpull時もno-ffでマージコミットができてしまいます。
$ git pull ... $ git log --graph --oneline * 73018f7 Merge branch 'master' of github.com:178inaba/test |\ | * f84d525 Merge branch 'foobar' | |\ |/ / | * 2d68cba Fix B. |/ * a3159f3 Fix A.
よく言われることですがpullというのはfetchとリモートブランチのmergeの組み合わせなのでリモートブランチをマージする時に上記no-ffの設定が適用されてしまいます。
これを防ぐためにpull時にはFast-forwardでマージするように設定します。
$ git config --global pull.ff only
$ git log --graph --oneline * c7356cb Fix C. $ git pull ... $ git log --graph --oneline * bdbb39c Fix D. * c7356cb Fix C.
pullでマージコミットが作られないようになりました。
まとめ
$ git config --global merge.ff false $ git config --global pull.ff only $ cat ~/.gitconfig [merge] ff = false [pull] ff = only
今日はここまで。