Câu trả lời:
Chỉnh sửa : Jakub Narębski có nhiều git-fu. Lệnh đơn giản hơn nhiều sau đây hoạt động hoàn hảo:
git describe --tags
(Hoặc không có --tags
nếu bạn đã kiểm tra thẻ chú thích. Thẻ của tôi rất nhẹ, vì vậy tôi cần --tags.)
câu trả lời ban đầu sau:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
Ai đó có nhiều git-fu có thể có một giải pháp thanh lịch hơn ...
Điều này thúc đẩy thực tế là git-log
báo cáo nhật ký bắt đầu từ những gì bạn đã kiểm tra. %h
in băm viết tắt. Sau đó git describe --exact-match --tags
tìm thẻ (nhẹ hoặc chú thích) khớp chính xác với cam kết đó.
Các $()
cú pháp trên giả định bạn đang sử dụng bash hoặc tương đương.
--exact-match
câu trả lời của tôi vài giây trước khi bình luận của bạn. Rất vui khi biết rằng bạn có thể xóa nó và vẫn nhận được thông tin tốt từ đầu vào mờ hơn.
git rev-parse HEAD
là một giải pháp tốt hơn git log -n1 --pretty='%h'
... nhưng tại sao bạn không thể đơn giản viết HEAD
(hoặc không có gì, như git describe
mặc định cho CHÍNH)?
Điều này làm việc cho tôi git describe --tags --abbrev=0
Hiển thị tất cả các thẻ trên CHÍNH hiện tại (hoặc cam kết)
git tag --points-at HEAD
git describe
là một lệnh sứ , mà bạn nên tránh:
http://git-blame.blogspot.com/2013/06/checking-civerse-branch-programatically.html
Thay vào đó, tôi đã sử dụng:
git name-rev --tags --name-only $(git rev-parse HEAD)
^0
cho các cam kết tương ứng với các thẻ (ví dụ: đối với thẻ 1.0
nó xuất ra 1.0^0
). Có cách nào chỉ có đầu ra Git không 1.0
, hay tôi nên sử dụng sed cho việc này?
Khi bạn kiểm tra một thẻ, bạn có cái gọi là "đầu tách ra" . Thông thường, cam kết CHÍNH của Git là một con trỏ tới nhánh mà bạn hiện đã kiểm tra. Tuy nhiên, nếu bạn kiểm tra thứ gì đó không phải là chi nhánh địa phương (ví dụ: thẻ hoặc chi nhánh từ xa), bạn có "đầu tách rời" - bạn không thực sự ở bất kỳ chi nhánh nào. Bạn không nên thực hiện bất kỳ cam kết nào trong khi trên một đầu tách ra.
Bạn có thể kiểm tra thẻ nếu bạn không muốn thực hiện bất kỳ chỉnh sửa nào. Nếu bạn chỉ kiểm tra nội dung của các tệp hoặc bạn muốn xây dựng dự án của mình từ thẻ, bạn có thể git checkout my_tag
làm việc với các tệp đó, miễn là bạn không thực hiện bất kỳ cam kết nào . Nếu bạn muốn bắt đầu sửa đổi các tệp, bạn nên tạo một nhánh dựa trên thẻ:
$ git checkout -b my_tag_branch my_tag
sẽ tạo ra một nhánh mới gọi là my_tag_branch
bắt đầu từ my_tag
. An toàn để cam kết thay đổi trên chi nhánh này.
git log --decorate
Điều này sẽ cho bạn biết những gì giới thiệu đang trỏ đến cam kết hiện đang được kiểm tra.
git describe
sẽ hiển thị tên thẻ nếu bạn chính xác trên thẻ (chú thích) hoặc<tag>-<n>-g<shortened sha-1>
nếu không,<n>
số lần xác nhận là từ đâu<tag>
.