[Git] pushのデフォルト挙動を理解して設定しよう
こんにちは、@yoheiMuneです。
今日はGitのpushの設定についてブログを書きたいと思います。Git 1.0系の場合はpushの初期挙動は危なくて使えないし、Git 2.0系の場合には設定しないとワーニングが出るので何かしら設定する必要があります。pushの挙動の違いを理解して、より良いGitライフを送りましょう!
この中で使うと良いものは
Git - git-config Documentation(英語)
本ブログではフロントエンドネタを中心に書いています。もしよければ本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧いただきましてありがとうございました!
今日は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
この中で使うと良いものは
simple
です。simple
が一番使いやすくそして事故しづらい設定だと思います。pushのデフォルト挙動は以下のように設定することができます。$ git config --global push.default simple
simple
が一番お勧めですが、せっかくなのでそれぞれの内容について理解してみたいと思います。nothing
pushする際に必ずpush先を指定する設定です。指定しない場合はエラーになります。current
現在のブランチとリモートブランチで同名のブランチがある場合に、pushできる設定です。現在のブランチがリモートブランチを追跡する(=upstream)設定でない場合にもpushすることができます。upstream
現在のブランチが追跡(=upstream)設定しているリモートブランチにpushを行います。simple
と異なり現在のブランチとリモートブランチが同名である必要はありません。この設定の場合は、git pull
とgit push
が完全に逆の意味になります。simple
Git 2.0からの初期値。追跡(=upstream)が設定されていて、かつ同名のブランチがリポジトリに存在する場合にpushできます。これは最も安全なオプションで初心者向きな設定です。matching
Git 1.0系の初期値。pushした場合にローカルブランチと同名のリモートブランチに対して全てpushします。例えばローカルにdevelop
、staging
、master
ブランチがあり、かつそれぞれ同名のリモートブランチが存在する場合、どのブランチでpushしたとしても、develop → develop
、staging → staging
、master → 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は様々な設定があるので使いこなすのは大変ですが、慣れるとその恩恵は大きいなぁと思う今日この頃です。本ブログではフロントエンドネタを中心に書いています。もしよければ本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧いただきましてありがとうございました!