LoginSignup
2
1

Gitを安心して使うために知っておきたいGitコマンドの動き git push編

Posted at

はじめに

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とは「ある一定の方向に押す」のような意味があるのでコマンド名通りだと思います。

本記事に出てくるコマンド

この記事で説明するコマンドは下記になります。

  1. git push origin [ローカルブランチ名]:[リモートブランチ名]
  2. git push origin [ローカルブランチ名]
  3. git push origin HEAD
  4. git push
  5. git push -u
  6. git push -n
  7. git push origin :[リモートブランチ名]

また、ご自身でドキュメントを見たい方はGit Documentationを確認して頂ければと思います。
下記のURLからご覧いただけます。

具体例と実行コマンド

ブランチ名を指定してプッシュする

git push origin [ローカルブランチ名]:[リモートブランチ名]

一切省略していない形のコマンドです。プッシュしたいローカルブランチ名、更新したいリモートブランチ名を明示的に指定します。
このコマンドはローカルとリモートでブランチ名が違ってもプッシュできます。
同名の場合、ほぼ使うことはないと思います。
スライド1.png

ローカルブランチと同名のリモートブランチにプッシュする

git push origin [ローカルブランチ名]

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

ブランチ名の代わりにHEADを使えばより簡単にプッシュできます。

git push origin HEAD

HEADとは現在作業中のブランチ(今後はカレントブランチと呼びます)のことで、こちらも同名のリモートブランチにプッシュします。
私は作業をした後すぐにプッシュすることが多いので、こちらのコマンドを使う頻度が1番高いです。

git pushを省略して実行する

git push

リポジトリ名やローカルブランチ名、リモートブランチ名の全てを省略した場合、カレントブランチを上流ブランチにpushします。
上流ブランチが設定されていない場合やローカルブランチ名と上流ブランチ名が同じではない場合、警告を出してくれます。

プッシュと同時に上流ブランチを設定する方法をがあるのでそちらと一緒に使うと安心して省略した形でもプッシュをできると思います。

スライド4.png

補足:上流ブランチを確認する

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コマンドについて少しでも理解を深めていただければ幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1