dreamin' blog

May 02, 2015

git pullでマージコミットを作らないようにしておきたい設定

git pull 何気なく毎日このコマンドを使っている人も多いのではないでしょうか。
実はこのコマンド色々と注意すべきコマンドだと思います。

masterブランチを最新に更新したいだけなのに、マージコミットがローカルにできてしまうことがあります。

マージコミットができるとき

remote/origin/master にローカルの master ブランチにはないコミットがある場合です。
普通にしておけば、そんなことにはならないような気もします。

しかしながら、

  • 誤ってコミットを master にしてしまった場合
  • 一度 git pull origin master でmergeコミットが生じた場合
  • その他、ローカルのmasterブランチとfast forwardでマージができないような場合

ローカルにしか存在しないコミットができてしまいます。

マージコミットを作らない方法

git pull origin master を行ったタイミングで、コミットメッセージが立ち上がる。
そんな経験はありませんか?そのときはマージコミットが余分にできてしまっています。

ローカルにあるブランチに余分にコミットができてしまっているのです。
そのコミット内容にもよりますが、それをpushしちゃうなんてことがあると危険ですよね。

以下のようにfetchをすれば、上記は起こりません。

$ git fetch && git rebase origin/master

fetchをしてから、origin/masterに対してrebaseする。

もしくは、

$ git fetch && git merge --ff origin/master

ffオプションをつけて、origin/masterをマージする。

ただ、せっかくだからpullが使いたい!という方は、pullでもffオプションやrebaseオプションを使えば、これが実現できます。
pullの方がコマンドが一発でいけるので便利ですよね。

$ git pull --rebase

もしくは

git pull --ff origin master

設定ファイルに書くこともできます

オプションを毎回指定するのはめんどくさいですよね!

fetchやpullのオプションを使うことで、マージコミットができないようにできますが、
これらは、設定で回避することができます。

.gitconfig にこれらどちらかの設定を書いておきましょう。

git pull でマージコミットを作らないようにnoffのマージを禁止しちゃう設定

[pull] ff = only

git pull でマージコミットを作らないように rebase で取得する設定

[pull] rebase = true

特に注意したいブランチ(masterとdevelop)だけ設定する場合は、branchで指定すると便利です。

[branch "master"] rebase = true

gitに関連するその他の記事

  • git cleanで.gitignore対象のファイルが消えてしまう話
  • gitのブランチ操作について
  • git status -b -s でブランチとリポジトリのファイルの状態を確認しよう

copyright © 2023 koheisg All Rights Reserved.