TL; DR
Bạn có thể làm điều này bằng cách xóa thẻ của bạn và tạo lại nó trong khi giả mạo ngày và tác giả:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Toàn bộ câu chuyện:
Dựa trên câu trả lời của Sungram (ban đầu được đề xuất là bản chỉnh sửa):
1. Câu trả lời được chấp nhận
Đây là một cải tiến so với câu trả lời của Andy và Eric Hu . Câu trả lời của họ sẽ tạo ra một đối tượng thẻ mới tham chiếu đến đối tượng thẻ cũ và cả hai sẽ có cùng tên.
Để minh họa điều này, hãy xem xét những điều sau đây:
> git tag tag1 tag1 -f -a # accepted answer
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
260ab7928d986472895b8c55e54569b3f3cb9517 tag1
a5797673f610914a45ef7ac051e3ee831a6e7c25 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Original description]
[tagged commit details]
2. Sự cải tiến của Sungram
Thay vào đó, sử dụng <tag name>^{}
làm đối số thứ hai của git tag
ý chí sẽ xóa tất cả các thẻ trước đó có cùng tên.
Xem xét việc tiếp tục phiên cuối cùng trước đó:
> git tag tag1 tag1^{} -f -a # suggested improvement
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
75f02acacfd7d91d55b5bcfdfb1f00aebeed15e3 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
[tagged commit details]
3. Lưu lại ngày tháng
Cuối cùng, nếu bạn muốn giữ ngày của thẻ gốc là ngày của thẻ được cập nhật, hãy sử dụng một số phép thuật awk (hoặc tương tự) hoặc chỉ dán ngày bạn muốn thay thế. Sau đây là sự thay thế cho ví dụ thứ hai (nếu không thì ngày ban đầu sẽ bị mất do ghi đè):
> GIT_COMMITTER_DATE="$(git show tag1 | # get info about the tag cascade including the date original of the original tag
> awk '{
> if ($1 == "Date:") {
> print substr($0, index($0,$3))
> }
> }' | # extract all the dates from the info
> tail -2 | head -1)" `# get the second to last date, as the last one is the commit date` \
> git tag tag1 tag1^{} -a -f # finally, update the tag message, but save the date of the old one
>
> git rev-list --objects -g --no-walk --all
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
e18c178f2a548b37799b100ab90ca785af1fede0 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Updated description]
[tagged commit details]
Người giới thiệu:
4. Tự làm
Ngoài ra, để cập nhật các thẻ, bạn chỉ cần xóa chúng và tạo lại chúng. Vì hóa ra việc cập nhật chỉ cần thêm một thẻ mới và làm cho nó trỏ đến thẻ cũ, hoặc thay vào đó, chỉ cần xóa hoàn toàn thẻ cũ và tạo một thẻ mới để trỏ đến cùng một cam kết.
Bạn có thể đạt được điều này bằng cách phát hành:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Đây [optional]
là một lĩnh vực tùy chọn; <required>
là một lĩnh vực bắt buộc. Tất nhiên, bạn có thể thêm bất kỳ cờ nào sau git tag
lệnh mà bạn thường làm.
git tag -m "A message" --edit v1.0
sẽ là đủ. Xem câu trả lời của tôi dưới đây