できない.dev

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

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

#push#tag#remote#release

公開:

要約

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

よくある原因

  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 を確認すると切り分けが早い。

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