gitでtagの名前を変更する方法をまとめます
の二つを紹介します
簡単な例
- 変更前のタグを old
- 変更後のタグを new
- リモートのリポジトリを origin
とすると,oldをnewに変更するコマンドは以下の三つになります
$ git tag new old
$ git tag -d old
$ git push origin new :old
上から順番に説明すると
- old を newにコピー
- oldを削除
- oldの削除と newの作成を origin にpush
となります
1と2はローカル側の変更,3はそれをリモート側に反映させるコマンドです.3をやらないとリモート側にoldのタグが残ったままになるので, git pull --tag とするたびに,ローカル側で消したはずのtag ( old )が復活します
応用:複数のタグを一括で置き換える方法
タグの一覧の取得
tmpfile というファイルを作成して,タグの一覧を保存します
$ git tag -l > tmpfile
tmpfile の修正
tmpfileには,1行ごとにタグが保存されます
例えば
$ cat tmp file
tag1
tag2
tag3
という感じで tag1, tag2, tag3 の合計三つのタグがあったとして,これをそれぞれtagA,tagB,tagCに置き換えたい場合は次のように tmpfileを修正します
tag1 tagA tag2 tagB tag3 tagC
tagの確認
tmpfileの内容は,各行に old new の順番で文字列を記載したフォーマットになります.試しにbashのワンライナーで内容を確認してみます
$ cat tmpfile | while read old new; do echo $old $new; done tag1 tagA tag2 tagB tag3 tagC
git のコマンド実行(その1)
ワンライナーを加工して,gitのコマンドを実行していきます
最初は git tag new old を実行します
慣れないうちは echo git tag ... という形で実行するコマンドを一度画面に表示してみて,内容を確認すると良いです
$ cat tmpfile | while read old new; do echo git tag $new $old; done git tag tagA tag1 git tag tagB tag2 git tag tagC tag3
問題なければ echoを外して,実際にgitコマンドを実行します
$ cat tmpfile | while read old new; do git tag $new $old; done
gitのコマンド実行(その2)
次は git tag -d old を実行します
$ cat tmpfile | while read old new; do git tag -d $old; done