Mainブランチのさまざまなコミットにタグを追加することで、GitHubのプロジェクトに Releases を追加しています。
私のプロジェクトの1つでは、時系列順にコミットにタグを追加しませんでした。 (明らかなコミットを見つけてタグ付けし、それからあまり明らかではない、olderコミットしてタグ付けしました。)
現在、 GitHubが表示されています v1.0.1が最新で、v0.7.0が先行し、v1.1.2が先行していますthat。
タグ付けされているコミットの代わりに、タグの作成日をリリース日として使用するようです。日付がタグ付けしているコミットと同じになるようにタグを編集するにはどうすればよいですか?
警告:これは、not注釈付きタグのタグメッセージを保持します。
変更する必要のあるタグごとに:
コード内:
# 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
そして、それは完全に使用可能ですが、「最新」のタグを探すビルドシステムに悪影響を及ぼす可能性のあるタグを時系列順に並べる効果があります。しかし、恐れはありません。 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を再ロードします(リリースは「ドラフト」としてマークされています)。ドラフトを削除します。
次に、上記の手順に基づいてバックタグを追加し、最後に結果のタグをGitHubにプッシュします。
git Push --tags
その後、GitHubリリース情報を再度追加してください。
他の回答のコメントのいくつかに基づいたワンライナーは次のとおりです。
git tag -l | while read -r tag ; do COMMIT_HASH=$(git rev-list -1 $tag) && GIT_COMMITTER_DATE="$(git show $COMMIT_HASH --format=%aD | head -1)" git tag -a -f $tag -m"$tag" $COMMIT_HASH ; done && git Push --tags --force
警告:これは上流のタグを無効にし、not注釈付きタグのメッセージを保存します!あなたが何をしているかを知っていることを確認し、間違いなくパブリックリポジトリに対してこれをしないでください!!!
分解するには...
# Loop over tags
git tag -l | while read -r tag
do
# get the commit hash of the current tag
COMMIT_HASH=$(git rev-list -1 $tag)
# get the commit date of the tag and create a new tag using
# the tag's name and message. By specifying the environment
# environment variable GIT_COMMITTER_DATE before this is
# run, we override the default tag date. Note that if you
# specify the variable on a different line, it will apply to
# the current environment. This isn't desired as probably
# don't want your future tags to also have that past date.
# Of course, when you close your Shell, the variable will no
# longer persist.
GIT_COMMITTER_DATE="$(git show $COMMIT_HASH --format=%aD | head -1)" git tag -a -f $tag -m"$tag" $COMMIT_HASH
done
# Force Push tags and overwrite ones on the server with the same name
git Push --tags --force
単一のプッシュを使用することを提案してくれた@Mr_and_Mrs_Dに感謝します。
他の答えに基づいて、ここにwillがタグメッセージの最初の行を保持する方法があります
git tag -l | while read -r tag ; do COMMIT_HASH=$(git rev-list -1 $tag) COMMIT_MSG=$(git tag -l --format='%(contents)' $tag | head -n1) && GIT_COMMITTER_DATE="$(git show $COMMIT_HASH --format=%aD | head -1)" git tag -a -f $tag -m"$COMMIT_MSG" $COMMIT_HASH ; done
git tag -l -n1 #check by listing all tags with first line of message
git Push --tags --force #Push edited tags up to remote
メッセージを保存する役割は次のとおりです。
COMMIT_MSG=$(git tag -l --format='%(contents)' $tag | head -n1)
head -n1
は、古いコミットメッセージの最初の行を取得します。代わりに-n2
または-n3
などに変更して、2行または3行を取得できます。
1つのタグの日付/時刻を変更したい場合、これはbashシェルでそれを行うためにワンライナーを分解する方法です:
tag=v0.1.0
COMMIT_HASH=$(git rev-list -1 $tag)
COMMIT_MSG=$(git tag -l --format='%(contents)' $tag | head -n1)
COMMIT_DATE=$(git show $COMMIT_HASH --format=%aD | head -1)
GIT_COMMITTER_DATE=$COMMIT_DATE git tag -s -a -f $tag -m"$COMMIT_MSG" $COMMIT_HASH
参照: