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