Chỉ là mã
# 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
Chi tiết
Câu trả lời của @dkinzer tạo ra các thẻ có ngày là ngày hiện tại (khi bạn chạy git tag
lệnh), không phải ngày của cam kết. Trợ giúp Git cho tag
có phần "Trên các thẻ Backdating" có nội dung:
Nếu bạn đã nhập một số thay đổi từ một VCS khác và muốn thêm thẻ cho các bản phát hành chính của tác phẩm của mình, sẽ rất hữu ích khi có thể chỉ định ngày để nhúng bên trong đối tượng thẻ; dữ liệu đó trong đối tượng thẻ ảnh hưởng, ví dụ, thứ tự các thẻ trong giao diện gitweb.
Để đặt ngày được sử dụng trong các đối tượng thẻ trong tương lai, hãy đặt biến môi trường GIT_COMMITTER_DATE
(xem phần thảo luận sau về các giá trị có thể; dạng phổ biến nhất là "YYYY-MM-DD HH: MM").
Ví dụ:
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
Trang "Cách gắn thẻ trong Git" cho chúng ta thấy rằng chúng ta có thể trích xuất thời gian của cam kết CHÍNH thông qua:
git show --format=%aD | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700
Chúng tôi có thể trích xuất ngày của một cam kết cụ thể thông qua:
GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
Tuy nhiên, thay vì lặp lại cam kết hai lần, có vẻ như chỉ cần thay đổi CHÍNH thành cam kết đó và sử dụng nó trong cả hai lệnh:
git checkout 9fceb02
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"