1. ホーム
  2. git

[解決済み] gitタグの変更日(またはそれに基づくGitHubのリリース)

2022-09-28 23:48:49

質問

私は リリース を追加しています。

あるプロジェクトでは、時系列でコミットにタグを追加していませんでした。(私は明らかなコミットを見つけてタグを付け、その後、あまり明らかでないコミットを見つけました。 より古い コミットを見つけてタグを付けました。)

現在 GitHub に表示されている v1.0.1 が最新で、その前に v0.7.0 があり、v1.1.2 の前に その .

タグ付けされているコミットではなく、タグの作成日をリリース日として使用しているように見えます。タグを編集して、タグ付けされているコミットと同じ日付にするにはどうしたらよいでしょうか。

どのように解決するのですか?

<ブロッククオート

警告:これは ではない は、注釈付きタグのメッセージを保持します。

概要

変更が必要な各タグについて。

  1. そのタグを表すコミットまで時間をさかのぼる
  2. タグを削除する (ローカルおよびリモート)
    • これで、GitHub 上の "Release" が Draft になり、後で削除することができます。
  3. 同じ名前のタグを再追加し、その日付をコミットの日付に設定するマジック起動を使用します。
  4. 日付を固定した新しいタグをGitHubにプッシュし直します。
  5. GitHub に移動し、現在ドラフト中のリリースを削除し、新しいタグから新しいリリースを再作成します。

コードで

# Fixing tag named '1.0.1'
git checkout 1.0.1               # Go to the associated commit
git tag -d 1.0.1                 # Locally delete the tag
git push origin :refs/tags/1.0.1 # Push this deletion up to GitHub

# Create the tag, with a date derived from the current head
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 1.0.1 -m"v1.0.1"

git push --tags                  # Send the fixed tags to GitHub

詳細

によると Git でのタグの付け方 :

リリースやバージョンバンプのタグ付けを忘れた場合、いつでもこのように遡ってタグ付けすることができます。

git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5

そして、これは完全に使用可能ですが、タグを時系列に並べないという効果があり、"latest" タグを探すビルドシステムを混乱させる可能性があります。しかし、心配は無用です。Linusはすべてを考えています。

# This moves you to the point in history where the commit exists
git checkout SHA1_OF_PAST_COMMIT

# This command gives you the datetime of the commit you're standing on
git show --format=%aD  | head -1

# And this temporarily sets git tag's clock back to the date you copy/pasted in from above
GIT_COMMITTER_DATE="Thu Nov 11 12:21:57 2010 -0800" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"

# Combining the two...
GIT_COMMITTER_DATE="$(git show --format=%aD  | head -1)" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"

ただし、すでにタグを追加している場合は、上記を git tag -f existingtag を使用しないと、マージしようとしたときに git から文句を言われます。

Rammy:docubot phrogz$ git push --tags
To [email protected]:Phrogz/docubot.git
 ! [rejected]        1.0.1 -> 1.0.1 (already exists)
error: failed to push some refs to '[email protected]:Phrogz/docubot.git'
hint: Updates were rejected because the tag already exists in the remote.

代わりに、ローカルでタグを削除する必要があります。

git tag -d 1.0.1

その削除をプッシュする をリモートで実行します。

git push origin :refs/tags/1.0.1

GitHub で Releases を再読み込みすると、リリースは "Draft"- としてマークされ、ドラフトが削除されています。

さて、上の説明に従って backdated タグを追加し、最後に GitHub にプッシュします。

git push --tags

を追加し、GitHub Release の情報を再度追加します。