はじめに
Gitを学び始めたばかりの方にとって実行するのに怖いコマンド筆頭はgit pushだと思います。1度プッシュしてリモートに変更を送信すると簡単には戻せないと聞いていたので、送信したいローカルブランチを対象のリモートブランチにちゃんと送信できるのか、とプッシュするときは毎回緊張していました。
これは、今考えるとgit pushを実行したときに何がどのように更新されるかを理解していなかったことが原因だと思います。
この記事ではGit初心者向けに、git pushコマンドに焦点を当てて実行されたときの動きをまとめています。
前回はgit branch編でgit branchコマンドに焦点を当てた記事を作成しました。良ければこちらも参照してみてください。
git pushコマンドとは
そもそもgit pushとはどのようなコマンドなのでしょうか。
ドキュメントには以下のように書いています。
Updates remote refs using local refs, while sending objects necessary to complete the given refs.
つまりgit pushとは、「ローカルブランチを送信してリモートブランチを更新する」コマンドとなります。プッシュによる影響を受けるのはプッシュ先となるリモートブランチだけになります。
pushとは「ある一定の方向に押す」のような意味があるのでコマンド名通りだと思います。
本記事に出てくるコマンド
この記事で説明するコマンドは下記になります。
git push origin [ローカルブランチ名]:[リモートブランチ名]git push origin [ローカルブランチ名]git push origin HEADgit pushgit push -ugit push -ngit push origin :[リモートブランチ名]
また、ご自身でドキュメントを見たい方はGit Documentationを確認して頂ければと思います。
下記のURLからご覧いただけます。
具体例と実行コマンド
ブランチ名を指定してプッシュする
git push origin [ローカルブランチ名]:[リモートブランチ名]
一切省略していない形のコマンドです。プッシュしたいローカルブランチ名、更新したいリモートブランチ名を明示的に指定します。
このコマンドはローカルとリモートでブランチ名が違ってもプッシュできます。
同名の場合、ほぼ使うことはないと思います。

ローカルブランチと同名のリモートブランチにプッシュする
git push origin [ローカルブランチ名]
ローカルブランチと同じ名前のリモートブランチにプッシュします。ほとんどの人はプッシュしたいローカルブランチ名とリモートブランチ名は同じだと思いますのでこちらのコマンドを使用している人は多いと思います。
また同名のリモートブランチが存在しない場合、ローカルブランチ名と同名のリモートブランチが新しく作成されます。

ブランチ名の代わりにHEADを使えばより簡単にプッシュできます。
git push origin HEAD
HEADとは現在作業中のブランチ(今後はカレントブランチと呼びます)のことで、こちらも同名のリモートブランチにプッシュします。
私は作業をした後すぐにプッシュすることが多いので、こちらのコマンドを使う頻度が1番高いです。
git pushを省略して実行する
git push
リポジトリ名やローカルブランチ名、リモートブランチ名の全てを省略した場合、カレントブランチを上流ブランチにpushします。
上流ブランチが設定されていない場合やローカルブランチ名と上流ブランチ名が同じではない場合、警告を出してくれます。
プッシュと同時に上流ブランチを設定する方法をがあるのでそちらと一緒に使うと安心して省略した形でもプッシュをできると思います。
補足:上流ブランチを確認する
git branch -vv
こちらのコマンドで上流ブランチを確認することができます。
push先を上流ブランチとして設定しながらプッシュする
git push -u origin [ローカルブランチ名]
git push -u origin HEAD
pushに成功したとき、push先のブランチを上流ブランチとして設定します。こちらのコマンドを1度実行することで、次からはgit pushと省略した形でプッシュできるようになります。
リモートブランチを更新しないようにプッシュする
git push -n
git push --dry-run
実際に送信はしませんが、プッシュをしたかのように動作します。
例えば下記のようなコマンドを入力します。
git push -u origin feature/newbranch
新しいリモートブランチを作成して、そのブランチを上流ブランチとして登録するためのコマンドです。
ここに--dry-runをつけて実行します。
$ git push --dry-run -u feature/newbranch
To [リモートリポジトリのURL]
* [new branch] HEAD -> feature/newbranch
Would set upstream of 'feature/newbranch' to 'feature/newbranch' of 'origin'
このように新しいブランチを作成して上流ブランチとして設定しましたと結果が返ってきます。しかし実際には新しいブランチは作成されていませんし、上流ブランチも設定されていません。
どうしてもプッシュするのが怖いときはこちらのコマンドでどのように動くのか確認できます。
リモートブランチを削除する
git push origin :[リモートブランチ名]
git push origin -d [リモートブランチ名]
git push origin --delete [リモートブランチ名]
上の方で説明したgit push origin [ローカルブランチ名]:[リモートブランチ名]の別の使い方です。ローカルブランチ名を指定しない場合、空をプッシュすることになります。それにより指定したリモートブランチが削除されます。
-dのようにオプションで削除することも可能です。
おわりに
本記事ではpushコマンドの中でも特によく使うコマンドを紹介しました。これらのコマンドを使うことができれば基本的にgit pushでやりたいことはできると思います。
「プッシュがよくわからなくて怖い」という方に、git pushコマンドについて少しでも理解を深めていただければ幸いです。
