Nhận băm phiên bản Git ngắn


381

Có cách nào sạch hơn để lấy băm phiên bản ngắn HEADtừ Git không?

Tôi muốn xem đầu ra giống như tôi nhận được từ:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Ban đầu tôi đã sử dụng lệnh trên để tạo một chuỗi phiên bản, nhưng điều này thậm chí còn tốt hơn:

git describe --tags

Nó sẽ xuất ra các chuỗi như 0.1.12(cam kết được gắn thẻ) hoặc 0.1.11-5-g0c85fbc(năm cam kết sau thẻ).


2
Vì bạn có vẻ giỏi trong việc thao tác dữ liệu với các đường ống và không có gì, bạn nên biết về bí danh git . Trong trường hợp này, có một lệnh cho những gì bạn muốn (xem câu trả lời) nhưng cuối cùng bạn sẽ tìm thấy một cái gì đó không có, và bí danh là tuyệt vời cho điều đó.
MatrixFrog

@ MatrixFrog cảm ơn vì tiền boa! Tôi đã có một số bí danh git đơn giản, nhưng tôi không biết chúng có thể mạnh đến mức nào cho đến bây giờ. Tôi đặc biệt thích màn hình graphviz.
Attila O.

1
Huh. Khi tôi chạy, git describe --tagstôi nhận được thông báo, "gây tử vong: Không tìm thấy tên, không thể mô tả bất cứ điều gì." .
Quinn Comendant

@QuinnComendant Có lẽ bạn cần gắn thẻ thứ gì đó trước --tagsđể hoạt động. Hãy thử tạo một thẻ trước ; ví dụ git tag 1.0.0.
Attila O.

Câu trả lời:


696

Thử cái này:

git rev-parse --short HEAD

Lệnh git rev-parsecó thể thực hiện một số lượng đáng kể các thứ khác nhau, vì vậy bạn cần xem qua tài liệu rất cẩn thận để phát hiện ra điều đó.


4
bạn có thể thực hiện ngược lại và nhận được băm xác nhận dài từ băm cam kết ngắn bằng cách thực hiện như saugit rev-parse HEAD
Andy

9
Lệnh cũng hoạt động với ID rev dài được sao chép từ các nguồn khác như git log, ví dụ như git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18ftrả về97dd2ae
chiborg

3
Nó chỉ hoạt động với các tài liệu tham khảo. Bạn có thể sử dụng CHÍNH, tên thẻ, tên nhánh hoặc băm đơn giản.
d12frosted

1
Cảnh báo, điều này trả về hàm băm cam kết 7 ký tự (theo mặc định) trong khi nhiều nơi như gitlab sử dụng 8 ký tự!
masterxilo

3
Bạn có thể sử dụng git rev-parse --short=8 HEADđể có được độ dài 8 ký tự được GitLab sử dụng. Bạn cũng có thể đặt core.abbrevthành 8 cho một repo git cụ thể bằng một lệnh như git config core.abbrev 8 Nguồn
n8felton

112

Bạn có thể làm bất kỳ định dạng nào bạn muốn với --pretty=format:

git log -1 --pretty=format:%h 

70
git log -1 --abbrev-commit

cũng sẽ làm điều đó.

git log --abbrev-commit

sẽ liệt kê các mục nhật ký với tổng kiểm tra SHA-1 viết tắt.


1
Cái thứ hai chính xác là thứ tôi đang tìm kiếm! Rất đơn giản để nhớ và hữu ích trong cuộc sống hàng ngày.
iFreilicht

Cũng hoạt động với git log --pretty=oneline, không giống như --oneline, nếu không thì in băm kích thước đầy đủ.
sdaau

46

Một cách đơn giản để xem Git commit phiên bản ngắn và thông báo cam kết Git là:

git log --oneline

Lưu ý rằng đây là tốc ký cho

git log --pretty=oneline --abbrev-commit

1
--oneline là lựa chọn tốt nhất
Juan Ignacio Barisich 23/07/19

1
@JuanIgnacioBarisich tùy chọn tốt nhất phụ thuộc vào lượng thông tin bạn cần xem. Trong trường hợp một người cần thêm thông tin như tác giả hoặc ngày thì git log --aboustv-commit sẽ là một lựa chọn tốt hơn. cũng log --pretty có thể là một lựa chọn tốt hơn để chọn thông tin nào cần đăng nhập
vận tốc

35

Một cách thực sự đơn giản là:

git describe --always

1
ha, ngọt ngào, giải quyết các trường hợp git mô tả sẽ thất bại nếu không (vì mô tả mong đợi một thẻ ở đâu đó trong lịch sử) thx
quan tâm

8
Không tốt nếu bạn thực sự muốn băm ngắn - vì điều này có thể trả về một thẻ chú thích là có.
Zitrax

Trong một số trường hợp git describe --longcó thể giúp đỡ. Từ các tài liệu : "Luôn xuất định dạng dài (thẻ, số lần xác nhận và tên cam kết viết tắt) ngay cả khi nó khớp với thẻ ." [nhấn mạnh của tôi]
djvg

Sử dụng --longlà tốt hơn nhưng đôi khi bạn nhận được một hàm băm ngắn và đôi khi 3 mục được phân tách bằng dấu gạch nối. Những ngày này, tôi sử dụng câu trả lời được chấp nhận. Ngày trước, tôi không biết về các thẻ chú thích - có lẽ chúng thậm chí không tồn tại!
Steven Shaw

16

Chi nhánh với hàm băm ngắn và bình luận cuối cùng:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

Tôi có phiên bản Git 2.7.4 với các cài đặt sau:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Bây giờ khi tôi làm:

git log --pretty=oneline

Tôi nhận được một id cam kết viết tắt gồm tám chữ số:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
Mặc dù mã này có thể trả lời câu hỏi, việc cung cấp ngữ cảnh bổ sung về cách thức và lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời.
SherylHohman

1
Ý tưởng tuyệt vời. Đánh giá cao nó, Sheryl
Xuống dòng

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.