できない.dev

Git push でタグがリモートに反映されない(タグを push できない)

git push はデフォルトでタグを送らない。
git push origin <タグ名> か --tags / --follow-tags で明示的に push する。
リモートに同名タグがあると拒否されるため、付け替えは削除してから再 push する。

公開: 更新:

実行例あり(2026-08-29 に実環境で検証)

要約

ローカルで git tag v1.0.0 を打って git push しても、リモートにタグは反映されない。git push はデフォルトでタグを転送しない 仕様のため、git push origin v1.0.0 のように タグ名を明示する か、--tags / --follow-tags を付けて push する必要がある。
「タグを作ったのに GitHub に出ない」「タグ起動の CI が走らない」の大半はこれが原因。

実行例

タグを打った直後の git push origin main は Everything up-to-date を返し、git ls-remote --tags origin は 1 行も出さない。
タグ名を明示した push か --tags を付けた push を実行して初めてリモートに現れ、注釈付きタグは実体を指す ^{} 行と対になって並ぶ。

warning: You appear to have cloned an empty repository.
$ git tag -a v1.0.0 -m "release 1.0.0"
$ git push origin main
Everything up-to-date
$ git ls-remote --tags origin
$ git push origin v1.0.0
To /tmp/tmp.iEkJKP/remote.git
 * [new tag]         v1.0.0 -> v1.0.0
$ echo $?
0
$ git ls-remote --tags origin
b34cd49e92ce37d955faf9fbf4397357fe26d5ed	refs/tags/v1.0.0
ab5f1f269ac44b321669db24e065a5b97ae2f8ee	refs/tags/v1.0.0^{}
$ git push origin --tags
To /tmp/tmp.iEkJKP/remote.git
 * [new tag]         v1.0.1 -> v1.0.1
$ echo $?
0
$ git ls-remote --tags origin
b34cd49e92ce37d955faf9fbf4397357fe26d5ed	refs/tags/v1.0.0
ab5f1f269ac44b321669db24e065a5b97ae2f8ee	refs/tags/v1.0.0^{}
d5e775d03c283c593148df8b61e602e8594adfaf	refs/tags/v1.0.1
ab5f1f269ac44b321669db24e065a5b97ae2f8ee	refs/tags/v1.0.1^{}

— 2026-08-29 時点の出力

検証環境

検証日
実行環境
alpine/gitAlpine Linux v3.24
バージョン
  • Git 2.54.0

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

よくある原因

  1. デフォルトでは送られない: git push が送るのはブランチの参照のみで、タグは対象外
  2. オプションの付け忘れ: --tags も付けず、タグ名の明示もしていない
  3. 同名タグの存在: リモートに同じ名前のタグが既にあり、! [rejected] v1.0.0 -> v1.0.0 (already exists) で拒否される
  4. push の片落ち: タグだけ push してコミットが未 push(またはその逆)で、タグ起動の CI が意図しないコミットを参照する

解決策

1. タグ名を明示して push する

git tag v1.0.0
git push origin v1.0.0

単発のリリースタグならこれが最も確実で、余計なタグを送ってしまう事故も無い。
仕様の詳細は git-push の公式ドキュメント(新しいタブで開く) を参照。

2. まとめて push する

# ローカルの全タグを送る
git push origin --tags
 
# push するコミットから到達可能な annotated タグだけを送る
git push --follow-tags

--tags は lightweight タグも含めて全部送るため、作業用の仮タグが混ざりやすい。
リリース運用では annotated タグ(git tag -a)と --follow-tags の組み合わせが安全。
タグの種類の違いは 公式ブックの Tagging(新しいタブで開く) にまとまっている。

3. 既存タグを付け替える

git push origin :refs/tags/v1.0.0   # リモートのタグを削除
git push origin v1.0.0              # 新しいタグを push

リモートに同名タグがあると push は拒否される。
付け替えはまず削除してから再 push する。
ただし、他のメンバーが取得済みのタグを動かすと参照先がずれるため、公開済みリリースタグの付け替えは原則避ける。

4. リモートの状態を確認する

git ls-remote --tags origin

「push したつもり」のタグが実際にリモートへ届いているかを直接確認できる。
タグ起動の CI が動かない場合は、まずここでタグの有無とコミット SHA を確認すると切り分けが早い。

この記事は役立ちましたか?