Eyes, JAPAN Blog > Gitでプッシュし忘れたタグを探すには

Gitでプッシュし忘れたタグを探すには

shimizu

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

今回は、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」と唱えながら活用したいと思います。

Comments are closed.