Git: Làm thế nào để biết thẻ nằm trên nhánh nào?


84

Tôi hiện đang bận rộn với một dự án có rất nhiều chi nhánh và tôi có một thẻ cho những thay đổi cuối cùng được thực hiện trên một trong các chi nhánh. Nhưng tôi không rõ thẻ này nằm ở nhánh nào.

Làm cách nào để biết thẻ nằm trên nhánh nào?

Câu trả lời:


118

Thậm chí ngắn hơn:

git branch --contains tags/<tag>

(nó hoạt động cho bất kỳ tài liệu tham khảo cây-ish nào)


Nếu bạn có thể tìm thấy thẻ cam kết nào đề cập đến :

 git rev-parse --verify tags/<tag>^{commit}
 # or, shorter:
 git rev-parse tags/<tag>~0

Sau đó, bạn có thể tìm thấy nhánh nào chứa cam kết đó .

git branch --contains <commit>

Như nhận xét bên dưới của người dùng3356885 , đối với các nhánh được tìm nạp (các nhánh trong không gian tên điều khiển từ xa)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>

6
Trên phiên bản Git của tôi, 1.7.1, tôi chỉ có thể làm được git branch --contains <tag>.
Dan Molding

@DanMoulding true, tôi đã chỉnh sửa câu trả lời để phản ánh điều đó. Ban đầu tôi quan tâm đến việc tìm cam kết được đính kèm với một thẻ.
VonC

6
Tìm kiếm thẻ được tạo trên nhánh từ xa sẽ không tạo ra bất kỳ kết quả nào trong trường hợp này. Nói cách khác, sẽ không có kết quả nào đối với các nhánh không tồn tại tại địa phương. Tùy chọn -a nên được sử dụng cho điều đó. git branch -a --contains <tag>. Tương tự sẽ làm việc cho các cam kết.
user3356885

1
Thật không may, điều này trả lại nhiều thứ: * (HEAD tách ra ở 82dd3f0) master refs / tags / 0.0.1-test-masterBr -> Tôi muốn truy cập theo chương trình chi nhánh, không có thông tin HEAD hoặc chính thẻ
herm 29/09/17

@herm Trong trường hợp đó, hãy thửgit branch --no-merge tags/<a-tag>
VonC

30

Nếu "git branch --contains" không có tác dụng gì, hãy đảm bảo rằng bạn đang bao gồm tất cả các chi nhánh, cả chi nhánh từ xa và cục bộ:

git branch -a --contains <tag>

Từ trợ giúp git:

Các hành động cụ thể của git-branch: -a, - tất cả liệt kê cả theo dõi từ xa và các nhánh cục bộ


5
git branch --contains tag

không làm gì cho tôi, nhưng tôi đã tìm thấy giải pháp của mình cho vấn đề này trong git gui .

Bắt đầu nó như thế này:

git gui

(Trên Ubuntu của tôi, tôi phải cài đặt nó trước sudo apt-get install git-gui.)

Sau đó, tôi chọn mục menu Kho -> Trực quan hóa Tất cả Lịch sử Chi nhánh . Trong cửa sổ hiện ra, tôi chọn mục menu Tệp -> Tham chiếu danh sách .

Một cửa sổ khác hiện lên, liệt kê tất cả các thẻ của tôi (và các tài liệu tham khảo khác). Chúng có thể nhấp được và sau khi nhấp vào một trong số chúng, tôi chỉ cần kiểm tra khung dưới cùng bên trái để biết danh sách các chi nhánh. Như thế này:

Parent: somesha (message)
Parent: someothersha (another message)
Child:  anothersha (yet another message)
Branches: branch1, master, remotes/origin/branch2, remotes/upstream/branch1, etc
Follows: v1.1.2
Precedes: v1.1.4

3

Liên quan đến nhận xét của @ VonC về việc tìm cam kết được tham chiếu bởi thẻ, chỉ cần sử dụng:

git show <tag>

Vì một thẻ được gắn với một cam kết cụ thể, nó có thể được sử dụng để hiển thị cam kết đó - điều này sẽ cung cấp cho bạn chi tiết cam kết đầy đủ.


0

Với một Thẻ bạn đánh dấu một tham chiếu. Vì vậy, khi bạn đang ở trên một nhánh nhà phát triển và Gắn thẻ trạng thái này. Thẻ của bạn là tham chiếu thực tế. Vì vậy, trong trường hợp này, bạn có thể tìm đến gitk hoặc một công cụ khác nơi cây được hiển thị. Ở đó, bạn có thể xem Thẻ tham chiếu nào.

git: Có cái gì đó giống như thẻ mỗi nhánh không?
http://git-scm.com/book/en/Git-Basics-Tagging

Đây là một lời giải thích tốt.


0

Một thẻ luôn đề cập đến số cam kết. Sử dụng số thẻ đó, bạn có thể tìm thấy nhánh mà từ đó thẻ được đặt bằng cách sử dụng:

git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"

0

Bạn cũng có thể thử cái này, có trường hợp sử dụng tương tự và cái này phù hợp với tôi

git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA  | sed "s/.*\///"

Hơi khác một chút nhưng lấy cảm hứng từ câu trả lời của @ ttfreeman


-1

git reflog --date = local | grep feature_xxx


3
Tôi nghi ngờ rằng điều này sẽ giúp - hoặc thậm chí có hiệu quả. Để thuyết phục tôi nếu không, vui lòng thêm giải thích về cách thức hoạt động và lý do tại sao nó được cho là hữu ích.
Yunnosch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.