In thông báo cam kết của một cam kết nhất định trong git


243

Tôi cần một lệnh hệ thống ống nước để in thông điệp cam kết của một cam kết nhất định - không hơn, không kém.


3
Nếu bất cứ ai đến đây tìm cách in thông điệp cam kết một dòng nhưng không quan tâm đến hàm băm xuất hiện ở đầu, thì các công việc sau:git show -s --oneline <commit>
waldyrious

Chúng ta nên thêm dòng nào để in thông điệp cam kết trong máy chủ? Ý tôi là tập tin hook nào?

Bạn có ý nghĩa gì bởi lệnh "ống nước"?
Bryan Ash

Câu trả lời:


332

Đó không phải là "hệ thống ống nước", nhưng nó sẽ làm chính xác những gì bạn muốn:

$ git log --format=%B -n 1 <commit>

Nếu bạn thực sự cần một lệnh "hệ thống ống nước" (không chắc tại sao đó là một yêu cầu), bạn có thể sử dụng rev-list:

$ git rev-list --format=%B --max-count=1 <commit>

Mặc dù rev-listcũng sẽ in ra sha cam kết (trên dòng đầu tiên) ngoài thông điệp cam kết.


4
Hoạt động hoàn hảo với tôi - nhưng tôi đã sử dụng %s%bthay vì %B(trên hộp Linux)
adamk

17
%Blà một công cụ xác định chính xác (ít nhất, trong Git 1.7.2, không chắc chắn khi nó được thêm vào).
mipadi

2
%Bđã được thêm vào sau 1.7.1 (có thể trong 1.7.1.1).
mipadi

1
Quả thực là như vậy - Git 1.7.2 rõ ràng. Rất nhiều ân sủng!
Đánh dấu vào

Bạn cũng có thể sử dụng: $ git log --format=%B -n 1 <commit> | cat -Điều đó sẽ cung cấp cho bạn thông điệp cam kết và không có cam kết sha, và bạn có thể "dẫn" nó. Tôi thực sự sử dụng điều này như là một phần của tập lệnh CI của tôi.
Paulo Muñoz

137

git showlà một lệnh hệ thống ống nước nhiều hơn git logvà có cùng các tùy chọn định dạng:

git show -s --format=%B SHA1

9
Và nếu bạn chỉ muốn dòng đầu tiên ("chủ đề"), hãy sử dụng %sthay vì %B.
ntc2

13
(Tôi thích câu trả lời này cho câu trả lời "nhật ký" hoặc "danh sách" được chấp nhận, vì đây là thao tác cam kết đơn, thay vì danh sách giới hạn ở 1 mục.)
Rich

17

Không phải hệ thống ống nước, nhưng tôi có những thứ này trong .gitconfig:

lsum = log -n 1 --pretty=format:'%s'
lmsg = log -n 1 --pretty=format:'%s%n%n%b'

Đó là "tóm tắt cuối cùng" và "tin nhắn cuối cùng". Bạn có thể cung cấp một cam kết để có được bản tóm tắt hoặc thông điệp của cam kết đó. (Tôi đang sử dụng 1.7.0.5 nên không có% B.)


Bạn có thể truyền tham số -n làm tham số. Vì vậy, thay vì chỉ trả lại cam kết cuối cùng, bạn có thể thực hiện để trả lại 5 lần cam kết cuối cùng. Ở đây, sự thay đổi cần thiết lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Đã tìm thấy nó ở đây stackoverflow.com/questions/7005513/ gợi ý Bạn chỉ cần chạy git lsum 5
kuklei

15

Điều này sẽ cung cấp cho bạn một danh sách rất nhỏ gọn của tất cả các tin nhắn cho bất kỳ thời gian được chỉ định.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT

4

Tôi bắt đầu sử dụng

git show-branch --no-name <hash>

Nó dường như nhanh hơn

git show -s --format=%s <hash>

Cả hai đều cho kết quả như nhau


1
Điều đó chỉ hiển thị dòng đầu tiên (% s), không phải toàn bộ thông điệp cam kết ("không hơn, không kém", như người hỏi đã viết). Nếu bạn có cách thực hiện nhánh hiển thị với% B, thì điều đó sẽ hữu ích.
Canonical Chris

3

Tôi sử dụng shortlog cho việc này:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
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.