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の動きは 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_HEAD
にgit reset
すればよい。
ローカルを破棄して、リモートの内容にする
1$ git fetch origin master
2$ git reset --hard FETCH_HEAD