git push

コマンドの概要

ローカルリポジトリのコミットをリモートリポジトリに反映するコマンド。ローカルリポジトリの内容をリモートリポジトリにコピーするような動きをするので、ローカルリポジトリと異なるコミットがリモートリポジトリに存在するとコンフリクトが発生、git pushは中止される。

コマンドの使い方

ローカルの内容をリモートにpush

コマンド引数を省略すると現在チェックアウトしているブランチの上流ブランチに push する。

1$ git push

上流ブランチが設定されていない場合には、git pushは失敗。上流ブランチを設定することを促されるので、上流ブランチを設定する。

1$ git push --set-upstream origin <branch>

引数にブランチを指定すると指定したブランチを push する。

1$ git push origin master

ローカルの master ブランチをリモートの master ブランチ に push という指定は

1$ git push origin master:master

リモートのブランチを削除する

git branch -dでローカルのブランチは削除できるが、リモートのブランチはそのまま残っている。リモートのブランチを削除するには、 // リモートの topic ブランチを削除

1$ git push origin --delete topic

もしくは、空のブランチを push

1$ git push origin :topic
push.default
このpushの動きは config の push.default が simple (デフォルト設定値)の場合。
nothing -> ブランチを設定しないと push を中止
current -> チェックアウトしているブランチと同名のブランチに push
upstream -> 上流ブランチに push
simple -> 上流ブランチにpushするが、上流ブランチの名前が違うとpushを中止。pullしたリモートリポジトリと異なるリモートリポジトリにpushする際は、同名のブランチにpush
matching -> すべてのローカルのブランチをリモートの同名ブランチにpush

push の強制 git push --force

上流ブランチとの間にコンフリクトが発生した場合、push は中止されるが、ローカルの内容で上流ブランチを書き換えるのがgit push -f
自分のローカルの内容でリモートを書き換えるので、当然コンフリクトは解消されるが、ほかの人がそのブランチを fetch していたら当然、ほかの人たちにコンフリクトが生ずる。ので、共有しているブランチには決してpush -fはしない。 ちなみに、ローカルの内容を破棄し、リモートの内容で強制的に上書きしたいときは、git fetchしてFETCH_HEADgit resetすればよい。

ローカルを破棄して、リモートの内容にする

1$ git fetch origin master
2$ git reset --hard FETCH_HEAD