2015/05/25更新

[Git] pushのデフォルト挙動を理解して設定しよう

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
今日はGitのpushの設定についてブログを書きたいと思います。Git 1.0系の場合はpushの初期挙動は危なくて使えないし、Git 2.0系の場合には設定しないとワーニングが出るので何かしら設定する必要があります。pushの挙動の違いを理解して、より良いGitライフを送りましょう!

画像

Special Thanks to https://flic.kr/p/eMHtHg





gitのpushの挙動(5つ)

gitのpushには以下5つの挙動が存在します。
  • nothing
  • current
  • upstream
  • simple
  • matching
参照:http://git-scm.com/docs/git-config

この中で使うと良いものはsimpleです。simpleが一番使いやすくそして事故しづらい設定だと思います。pushのデフォルト挙動は以下のように設定することができます。
$ git config --global push.default simple

simpleが一番お勧めですが、せっかくなのでそれぞれの内容について理解してみたいと思います。

nothing

pushする際に必ずpush先を指定する設定です。指定しない場合はエラーになります。


current

現在のブランチとリモートブランチで同名のブランチがある場合に、pushできる設定です。現在のブランチがリモートブランチを追跡する(=upstream)設定でない場合にもpushすることができます。


upstream

現在のブランチが追跡(=upstream)設定しているリモートブランチにpushを行います。simpleと異なり現在のブランチとリモートブランチが同名である必要はありません。この設定の場合は、git pullgit pushが完全に逆の意味になります。


simple

Git 2.0からの初期値。追跡(=upstream)が設定されていて、かつ同名のブランチがリポジトリに存在する場合にpushできます。これは最も安全なオプションで初心者向きな設定です。


matching

Git 1.0系の初期値。pushした場合にローカルブランチと同名のリモートブランチに対して全てpushします。例えばローカルにdevelopstagingmasterブランチがあり、かつそれぞれ同名のリモートブランチが存在する場合、どのブランチでpushしたとしても、develop → developstaging → stagingmaster → masterと全てのブランチでpushを行います。Githubなどで使うにはかなり危険な設定で、意図しない内容をリモートにpushしてしまう可能性があります。



追跡(=upstream)の設定方法

上記のpush.default設定の説明の中で何度か「追跡」という言葉が出てきました。ローカルブランチの追跡を設定する方法はいくつか存在しますので、よく使うものを紹介します。
# push時に設定する
$ git push --set-upstream origin [リモートブランチ名]
# または省略して
$ git push -u origin [リモートブランチ名]

# 現在のブランチに追跡設定をする
$ git branch --set-upstream origin/[リモートブランチ名]
# または省略して
$ git branch -u origin/[リモートブランチ名]
そして、現在のブランチの設定は以下で確認できます。
$ git branch -vv



参考資料

今回のブログでは以下のサイトを参考にしました。ありがとうございます。

Git - git-config Documentation(英語)



最後に

今日はGitのpush設定についてブログを書きました。開発環境でGitのセットアップをするたびに設定を調べていた気がするので、ブログにまとめてみました。Gitは様々な設定があるので使いこなすのは大変ですが、慣れるとその恩恵は大きいなぁと思う今日この頃です。

本ブログではフロントエンドネタを中心に書いています。もしよければ本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧いただきましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。