dreamin' blog

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

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

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

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

しかしながら、

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

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

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に関連するその他の記事