git push コマンド

リモートレフを関連するオブジェクトと共に更新します。

概要

git push はローカルのコミットをリモートリポジトリに送信します。リモートブランチをローカルブランチと一致するように更新し、更新を完了するために必要なすべてのオブジェクトをアップロードします。このコマンドは、変更を他の人と共有したり、作業をリモートリポジトリにバックアップしたりするために不可欠です。

オプション

-u, --set-upstream

現在のブランチのアップストリームを設定し、追跡関係を確立します。

$ git push -u origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:username/repository.git
   a1b2c3d..e4f5g6h  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

-f, --force

リモートブランチの状態を上書きして強制的に更新します。データ損失を引き起こす可能性があるため、細心の注意を払って使用してください。

$ git push -f origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:username/repository.git
 + a1b2c3d...e4f5g6h main -> main (forced update)

--all

すべてのブランチをリモートリポジトリにプッシュします。

$ git push --all origin
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 584 bytes | 584.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:username/repository.git
   a1b2c3d..e4f5g6h  main -> main
   b2c3d4e..f5g6h7i  feature -> feature

--tags

すべてのタグをリモートリポジトリにプッシュします。

$ git push --tags origin
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 160 bytes | 160.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:username/repository.git
 * [new tag]         v1.0.0 -> v1.0.0
 * [new tag]         v1.1.0 -> v1.1.0

-d, --delete

指定したリモートブランチを削除します。

$ git push -d origin feature-branch
To github.com:username/repository.git
 - [deleted]         feature-branch

使用例

デフォルトのリモートにプッシュする

$ git push
Everything up-to-date

特定のブランチを特定のリモートにプッシュする

$ git push origin feature-branch
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:username/repository.git
   a1b2c3d..e4f5g6h  feature-branch -> feature-branch

異なるリモートブランチ名にプッシュする

$ git push origin local-branch:remote-branch
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:username/repository.git
   a1b2c3d..e4f5g6h  local-branch -> remote-branch

ヒント:

追跡ブランチの設定

新しいブランチを作成する際は、git push -u origin branch-name を使用して追跡を設定しましょう。これにより、毎回リモートとブランチを指定せずに git pullgit push を使用できるようになります。

--force の代わりに --force-with-lease を使用する

--force-with-lease--force よりも安全です。まだ見ていない他の人の変更を上書きしないことを保証します。リモートブランチが予期した状態にある場合にのみプッシュを強制します。

特定のタグのみをプッシュする

--tags ですべてのタグをプッシュする代わりに、git push origin tag-name を使用して特定のタグをプッシュできます。

強制プッシュする前に確認する

強制プッシュする前に、必ず git log origin/branch..branch を実行して、リモートで上書きしようとしているコミットを確認しましょう。

よくある質問

Q1. git pushgit push origin main の違いは何ですか?

A. git push は、設定されている場合、現在のブランチをそのアップストリームブランチにプッシュします。git push origin main は、現在のブランチに関係なく、ローカルの main ブランチを origin リモートの main ブランチに明示的にプッシュします。

Q2. 新しいローカルブランチをリモートリポジトリにプッシュするにはどうすればよいですか?

A. git push -u origin branch-name を使用して、新しいブランチを作成してプッシュし、同時に追跡を設定します。

Q3. プッシュ時に「rejected」エラーが発生します。どうすればよいですか?

A. これは通常、リモートにローカルにない変更があることを意味します。まず git pull を実行して変更を統合し、コンフリクトがあれば解決してから、再度プッシュしてください。

Q4. プッシュを元に戻すにはどうすればよいですか?

A. git revert で変更を元に戻してそのリバートをプッシュするか、以前のコミットにリセットした後に git push -f を使用します(注意して使用してください)。

Q5. 「non-fast-forward updates were rejected」とはどういう意味ですか?

A. ローカルリポジトリがリモートより古いことを意味します。プッシュする前に最新の変更を取得する必要があります。または、リモートを上書きしたい場合は --force を使用します(共有ブランチでは推奨されません)。

参考文献

https://git-scm.com/docs/git-push

改訂履歴