Gitで古いコミットにタグ付けするには?

私たちはgitに慣れていないので、リポジトリの最初にタグを設定したいと思っています。 私たちの本番コードは最初のリポジトリと同じですが、その後にコミットを行っています。 最初にタグを設定しておけば、本番環境を既知の安定した状態にロールバックすることができます。

では、任意の古いコミットにタグを追加するにはどうすればいいのでしょうか?

ソリューション

git tag -a v1.2 9fceb02 -m "Message here"

ここで、9fceb02はコミットIDの先頭部分です。

このタグをプッシュするには、git push origin v1.2 を使用します。

git log` を実行すると、現在のブランチのすべてのコミット ID を表示することができます。

Pro Git Bookには、taggingに関する良い章があります。

Warning: これは、現在の日付 のタグを作成します (この値は、たとえば GitHub のリリースページに表示されるものです)。 タグの日付をコミット日にしたい場合は、another answerをご覧ください。

解説 (6)

Just the Code

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

詳細

dkinzerさんの回答では、日付がコミットの日付ではなく、現在の日付(git tagコマンドを実行したとき)のタグが作成されます。タグ`のGitヘルプには、_"On Backdating Tags"_というセクションがあり、そこには次のように書かれています。

_他のVCSから変更を取り込んで、自分の作品のメジャーリリースのタグを追加したい場合、タグオブジェクトの中に埋め込む日付を指定できると便利です。タグオブジェクトの中のこのようなデータは、たとえばgitwebインターフェイスでのタグの順序に影響します。

_今後のタグオブジェクトで使用する日付を設定するには、環境変数 GIT_COMMITTER_DATE を設定します (設定可能な値については後述しますが、最も一般的な形式は "YYYY-MM-DD HH:MM" です)._.

_例えば、以下のようになります。

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

このページ "How to Tag in Git" を見ると、HEAD のコミットの時間を抽出する方法が書かれています。

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

特定のコミットの日付を抽出するには、次のようにします。

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

しかし、コミットを2回繰り返すのではなく、HEADをそのコミットに変更して、両方のコマンドで暗黙的に使用する方が簡単だと思われます。

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
解説 (4)

最も簡単な方法は

git tag v1.0.0 f4ba1fc です。

ここで、f4ba1fc はタグ付けしたいコミットのハッシュの先頭、v1.0.0 はタグ付けしたいバージョンを表しています。

解説 (0)