【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オプションの意味を知らずにプッシュする際に必ず必要なものだと思っている人(私もそうでした)も意外と多いのでは思いますが、プッシュする際のコマンドが短いと、作業効率がかなりアップしますのできちんと意味を理解して使いこなせるようにしておきたいですね。

Follow me!