Làm thế nào để xuất nhật ký git chỉ với dòng đầu tiên?


330

Tôi đang cố gắng để tùy chỉnh định dạng cho git log. Tôi muốn tất cả các cam kết sẽ được hiển thị trong một dòng. Mỗi dòng chỉ nên hiển thị dòng đầu tiên của thông điệp cam kết.
Tôi phát hiện ra rằng git log --pretty=shortnên thực hiện thủ thuật nhưng trên máy tính của tôi, nó hiển thị nhật ký đầy đủ như git logvậy (bên cạnh dấu thời gian).

Hơn nữa, tôi đã cố gắng sử dụng trình giữ chỗ như được định nghĩa trong trang man . Mặc dù vậy, tôi không thể tìm thấy một lệnh để rút ngắn thông điệp tường trình. Tôi đã thử dòng git log --pretty=format:'%h : %s'này cho thấy hàm băm ngắn %hvà thông báo đầy đủ %strong một dòng.

Tôi đang sử dụng git version 1.7.3.1.msysgit.0trên Vista.


Có lẽ nó có liên quan đến cách tôi viết tin nhắn cam kết của mình. Đây là một ví dụ:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Vì vậy, với ví dụ đã cho, tôi chỉ muốn được xuất ra Added some functionality.trước bởi hàm băm ngắn.


1
%slà chủ đề, không phải là thông điệp đầy đủ.
Josh Lee

Thật sự rất khó để nói những gì bạn thực sự muốn. Các shortđịnh dạng không phải là tất cả trên cùng một dòng, mặc dù (bất ngờ!) onelineLà. Nếu oneline%h : %skhông phải những gì bạn muốn, có gì sai với họ? Đặc biệt, %slà chủ đề, dòng đầu tiên của thông điệp cam kết. Đó thực sự là một phiên bản rút gọn. Có thể bạn đã thực hiện các cam kết với một dòng dài duy nhất cho tin nhắn và xem chúng bằng cách nào đó bằng cách gói từ?
Cascabel

Bạn hoàn toàn hiểu. Vấn đề là oneline%skhông xuất ra những gì chúng ta mong đợi, ít nhất là trên máy tính của tôi. Tôi đã cập nhật bài viết của mình với một ví dụ về thông điệp cam kết của tôi. Có lẽ nó giúp.
JJD

Câu trả lời:


544

Bạn đã thử điều này?

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

Vấn đề có lẽ là bạn đang thiếu một dòng trống sau dòng đầu tiên. Lệnh trên thường hoạt động với tôi, nhưng tôi chỉ thử nghiệm trên một cam kết mà không có dòng thứ hai trống. Tôi nhận được kết quả giống như bạn: toàn bộ tin nhắn trên một dòng.

Dòng thứ hai trống là một tiêu chuẩn trong tin nhắn cam kết git. Hành vi bạn nhìn thấy có thể được thực hiện trên mục đích.

Dòng đầu tiên của một thông điệp cam kết có nghĩa là một mô tả ngắn. Nếu bạn không thể thực hiện nó trong một dòng duy nhất, bạn có thể sử dụng một vài dòng, nhưng git coi mọi thứ trước dòng trống đầu tiên là "mô tả ngắn". onelinein toàn bộ mô tả ngắn, vì vậy tất cả 3 hàng của bạn.


Cảm ơn! Bạn đã giải quyết được bí ẩn: Tôi không có một dòng trống nào sau dòng đầu tiên trong thông điệp cam kết của tôi để tách chủ đề khỏi phần còn lại. Tuy nhiên, thật tuyệt nếu tôi có thể tự do đưa nó vào hoặc để nó ra ngoài.
JJD

1
Không vấn đề gì. Trong thực tế, bạn có tự do có dòng trống hay không. Chỉ có điều toàn bộ tin nhắn của bạn trở thành tin nhắn ngắn nếu bạn bỏ nó đi. Tôi thích mô tả ngắn / mô tả chi tiết này và tôi cho rằng việc giới hạn trong một dòng cho mô tả ngắn là một vấn đề, do đó yêu cầu dòng trống. Bạn luôn có thể dẫn đầu ra của git logmột tập lệnh lọc, nhưng tôi thực sự sẽ ủng hộ việc viết một mô tả ngắn với dòng trống.
Gauthier

89
Ngoài ra git log --oneline --oneline là một tốc ký tích hợp cho "--pretty = oneline --aboustv-commit" được sử dụng cùng nhau.
Jeremy Logan

Làm thế nào bạn thoát khỏi hashtag rút ngắn được chuẩn bị trước? Không phải là nó không đẹp lắm. Nhưng không có cut. Đó sẽ là awkphường ... (BTW toán Q: là những gì các tỷ lệ cược các bit tiếp theo trong một chuỗi Huffman mã hóa đúng cách, ở cấp lưu trữ, bật hay tắt Gợi ý: Đó là === 50%?.)
Phlip

7
đó là nó Ồ, ngoài ra, tôi có một trang đầy s, vì vậy tôi tự nhiên thêm một %cho '%s'. C-;
Phlip

158

git log --onelinelàm những gì bạn muốn?


1
Tôi không muốn toàn bộ thông điệp cam kết được hợp nhất vào một dòng. Tôi chỉ muốn xem dòng đầu tiên của mỗi thông báo cam kết.
JJD

41

Nhật ký git tốt hơndễ dàng hơn bằng cách tạo bí danh . Dán mã dưới đây vào thiết bị đầu cuối chỉ một lần cho một phiên. Dán mã vào hồ sơ zshrc hoặc bash để làm cho nó bền bỉ.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Đầu ra

git lg

Đầu ra thay đổi dòng

git lg -p

Hoặc (được khuyến nghị)
Dán mã này vào tệp .gitconfig toàn cầu

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Đọc thêm.
https://coderwall.com/p/euwpig/a-better-git-log
Đọc nâng cao.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advified-examples/


Ví dụ này là một bản demo đẹp của định dạng đẹp, nhưng "Dán mã bên dưới vào thiết bị đầu cuối chỉ một lần" có vẻ sai vì nó không tạo bí danh cho "git lg"
Drone2537

lưu ý cho những người khác, nếu bạn đặt lệnh này theo đợt, thay thế% bằng %%, thay thế 'bằng "". kết quả = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Bạn cũng có thể chuyển -p vào tệp dơi này để nhận các dòng thay đổi
Dheeraj Bhaskar


25

Bạn có thể xác định bí danh toàn cầu để bạn có thể gọi một bản ghi ngắn theo cách thoải mái hơn:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Sau đó, bạn có thể gọi nó bằng cách sử dụng git slog(nó thậm chí hoạt động với tự động hoàn thành nếu bạn đã bật nó).


8

Không có thông điệp cam kết, chỉ có hàm băm:

git log --pretty=oneline | awk '{print $1}'

7
Nếu bạn chỉ muốn băm ...git log --pretty=format:"%H"
michael_j_ward

Nếu bạn chỉ muốn băm bạn cũng có thể sử dụng git rev-list HEAD.
Fabio nói Phục hồi Monica

-8

nếu bạn muốn luôn luôn sử dụng git logtheo cách như vậy, bạn có thể thêm bí danh git bằng cách

git config --global alias.log log --oneline

sau đó git logsẽ in những gì bình thường sẽ được in bởigit log --oneline


12
Điều này không thực sự hoạt động, bởi vì (A. git aliases không thể ghi đè tên lệnh tích hợp) và (B. Cần phải có dấu ngoặc kép xung quanh "log --oneline").
Max Nanasy
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.