過去のコミットに遡ってtagを付ける

  • 6
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

ずっとtag管理していなかったけどこれから始めたい!
とかtagを付け忘れてコミットを進めてしまった時に昔のコミットに戻ってtagを付ける方法です。

(2015/07/27追記)
下記よりもお手軽な方法をコメントで頂きました。

$ git tag [tagname] [commit id]

 

以下原文


まずはtagを付けたいコミット位置まで戻ります。

$ git reset --soft e50a621 #戻りたい位置のコミットハッシュ

--softを使わず--hardでもオプション無しでも大丈夫ですが、
自分は一番安全で処理の軽いと思われる--softを使用しています。
--softを使うとHEADの移動のみが行われワーキングツリーとステージングエリアに影響しない=現状の作業に影響が無いので安全です。

resetコマンドが成功したらtagを付けたいコミット位置に居る状態となっているので、tagを付けます。

$ git tag -a some-tagname

無事タグを付け終わったのでreset前のコミット位置にHEADを戻しましょう。
まずはgit reflogコマンドを使用します。

$ git reflog
e50a621 HEAD@{0}: reset: moving to e50a621
aa9021b HEAD@{1}: clone: from https://github.com/username/some-project.git

repositoryの状況によってまちまちですがgit resetの結果も含めた履歴が表示されると思います。

e50a621 HEAD@{0}: reset: moving to e50a621

この場合git resetコマンドによりコミットハッシュ「e50a621」へ戻ったという事を表していますので、
git resetする前のコミット位置は位置行下のものになります。

aa9021b HEAD@{1}: clone: from https://github.com/username/some-project.git

git resert前のコミット位置に対してgit resetコマンドを打つ事で現代に戻します。(ややこしくてすみません)

$ git reset --soft HEAD@{1}

または

$ git reset --soft aa9021b

で最新のコミット位置へ帰還する事が出来ます。

以上で過去のコミットに対してtagを付ける作業が完了しました!
git reflogはこれ以外にも大変便利なコマンドなので是非覚えておく事をオススメします!