【Git】プッシュ先を明示しないといけない理由とuオプションについて
ローカルリポジトリでの作業コミットをリモートリポジトリにプッシュする際、git pushコマンドの後の記述を明示しなくてはいけない場合とそうでない場合についてまとめます。
git push だけだとプッシュできない理由
現在の作業ブランチにリモートリポジトリのブランチ(上流ブランチという)が存在しない。
(例)ブランチsub1から、新規ブランチsub2を作成
git branch master * sub1
git checkout -b sub2
git branch master sub1 * sub2
ブランチに対して上流ブランチの紐付けは下記のコマンドで確認することができます。
git branch -vv
各ブランチの紐付け結果
master d039a35 [origin/master] Merge remote-tracking branch 'origin/master' into sub1 sub1 870972d [origin/sub1] sub1 update * sub2 870972d sub1 update
各ブランチごとに
ブランチ名 コミット番号 [上流ブランチ名] コミットメッセージ
が表示されますが、作成直後である、現在のsub2にだけ上流ブランチの紐付けがないことが確認出来ます。
そのため、コマンド git push だけでは プッシュすることが出来ず、下記のように上流ブランチ名を指定しなくてはいけないのです。
git push origin sub2
git push リモートリポジトリ ブランチ名
毎回、上流ブランチを指定するはめんどくさい
コミットをプッシュするたびに毎回上流を指定してやるのは手間なので、初回のプッシュ時に下記のオプションで上流ブランチを恒久的に設定することが出来ます。
git push --set-upstream origin sub2
または(省略系)
git push -u origin sub2
ちなみに、このオプションは最初に git push のみでプッシュを行った際に表示されるエラーメッセージ内でも教えてもらえます。
オプション付きでプッシュした後、上流ブランチの紐付けが作成されていることを確認出来ます。
git branch -vv master d039a35 [origin/master] Merge remote-tracking branch 'origin/master' into sub1 sub1 870972d [origin/sub1] sub1 update * sub2 b4d65b6 [origin/sub2] update2 from sub2 branch
次回以降この作業ブランチのコミットをプッシュする際は、
git push
のみで上流ブランチに対してプッシュできるようになります。
逆に、uオプションの意味を知らずにプッシュする際に必ず必要なものだと思っている人(私もそうでした)も意外と多いのでは思いますが、プッシュする際のコマンドが短いと、作業効率がかなりアップしますのできちんと意味を理解して使いこなせるようにしておきたいですね。