Git Push
最終更新
git push は、ローカルブランチのコミットを対応するリモート(GitHub など)にアップロードします。ブランチに upstream が設定されていれば、単純な git push だけで十分です。新しいブランチの最初のプッシュでは -u を使ってリモートブランチを作成し、追跡を設定するので、以降のプッシュやプルには引数が不要になります。
これらをターミナルプレイグラウンドで試してみましょう。ブラウザ上の本物のシェルで、インストール不要です。
構文
| Command | What it does |
|---|---|
git push | 現在のブランチを upstream にプッシュする |
git push -u origin feature | 新しいブランチをプッシュし upstream を設定する |
git push origin main | 特定のリモートとブランチにプッシュする |
git push --tags | ローカルのタグをすべてプッシュする |
git push --force-with-lease | rebase 後に安全に force push する |
よくあるケース
| Goal | Command |
|---|---|
| まったく新しいブランチをプッシュする | git push -u origin feature |
| upstream 設定後にプッシュする | git push |
| 単一のタグをプッシュする | git push origin v1.0.0 |
| リモートブランチを削除する | git push origin --delete feature |
実例
| 手順 | コマンド | 結果 |
|---|---|---|
| 1 | git remote add origin <url> | ローカルリポジトリを origin という名前でリモートに接続する |
| 2 | git push -u origin main | リモートに main を作成し、ローカルの main の upstream に設定する |
| 3 | git push | 以降の main でのプッシュは引数が不要になる |
git push よくある質問
git push は何をするのですか?
ローカルブランチにあってリモートブランチにないコミットを送信し、リモートブランチをそれに合わせて進めます。送信されるのはコミットだけで、コミットしていない変更は手元に残るので、先にコミットしてください。自分が持っていないコミットがリモートにある場合、pull か rebase をするまでプッシュは拒否されます。
新しいブランチをリモートにプッシュするには?
git push -u origin <branch> を実行します。-u(--set-upstream の短縮形)はリモートにブランチを作成し、ローカルブランチをそれに紐付けるので、以降は引数なしの git push と git pull が動作します。リモートブランチはこの最初のプッシュまで存在しません。git push が 'no upstream branch' と表示するのはなぜ?
ローカルブランチがまだリモートブランチに紐付いていないためです。
git push -u origin <branch> でプッシュしてリモートブランチを作成し、upstream を設定してください。その後は git push だけでコミットの送信先がわかるようになります。タグをプッシュするには?
タグはデフォルトではプッシュされません。単一のタグは
git push origin <tagname> で、すべてまとめては git push --tags でプッシュします。これはよくある落とし穴です。ローカルで作成したタグは、明示的にプッシュするまでリモートには現れません。安全に force push するには?
履歴を書き換えた後(rebase や amend)は、
--force ではなく git push --force-with-lease を使いましょう。最後の fetch 以降に他の誰もプッシュしていない場合にのみリモートを上書きするので、チームメイトの作業を守れます。詳しい説明は git force push のページを参照してください。git push -u origin main はどういう意味ですか?
origin はリモート(git remote を参照)、main はブランチで、-u はそのリモートブランチをローカルの main の upstream に設定します。GitHub が新しいリポジトリで表示するのがこのコマンドで、一度実行すれば、main での git push と git pull は引数なしで動作します。git push と git pull の違いは何ですか?
コミットを動かす向きが逆です。
git push はローカルのコミットをリモートにアップロードし、git pull はリモートの新しいコミットをダウンロードして自分のブランチにマージします。non-fast-forward としてプッシュが拒否された場合は、たいてい先に pull が必要です。pull が内部で何をしているかは git fetch と pull の違い を参照してください。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ上の本物のシェルで
git push を実行できます。インストールは不要です。Coddy の無料のインタラクティブな Git コースでも、リモートの扱いを段階的に学べます。