エンジニア向け
Gitでプッシュし忘れたタグを探すには
shimizu
今回は、Gitでタグを管理している際に遭遇した「あれ?プッシュしたはずが未プッシュのタグがあるようだ!」という場面での対処方法についてご紹介します。
こんな場面に出くわした
Gitでのタグといえば、リリースバージョンやマイルストーンの履歴を記して共有できる便利な機能ですが、先日あるリポジトリで作業中、ローカルとoriginの両方に存在するはずのタグが、ローカルにしか存在しないという状況を発見しました。おそらく、タグを付けた後にoriginにプッシュする手順が漏れていたのでしょう。念のため、同じように未プッシュの状態になっているタグがないかどうか、確認したいと思います。「ローカルに存在しているがまだリモートにプッシュされていないタグ」を一覧表示したいのですが、ヘルプを見る限りgitコマンドにはそれを直接実行する機能はないようです。
どうやって解決するか
ネット上の情報を当たってみると、既に同じ問題についての質問がありました。
git remote – How to list unpushed Git tags – Stack Overflow
ここに挙げられている回答によると、解決策としては「git show-ref --tags
(ローカルとリモートそれぞれのタグの一覧出力)の実行結果から、git ls-remote --tags origin
(リモートのタグの一覧出力)の実行結果を除いた項目を表示する」という方法があるようです。それがこちらのコマンド。
$ git show-ref --tags | grep -v -F "$(git ls-remote --tags origin | cut -f 2)"
これを実行することで、見事にローカルにのみ存在するタグが表示されました。用はこれで足りるのですが、これとは別にもう一つの方法がありました。
$ git push --tags --dry-run
なんともシンプルですね。これは「まだoriginにプッシュされていないタグをプッシュする。完了したらプッシュ対象となったタグを表示する(ただし、--dry-run
を付けているので実際にプッシュはしない)」という動作になるため、リモートに影響を与えずに、まだoriginにプッシュされていないタグの一覧のみを得ることが出来ます。
エイリアスに登録しておいて、いざというときに「こんなこともあろうかと( ̄▽ ̄)b」と唱えながら活用したいと思います。