Đầu ra ngắn nhất có thể từ nhật ký git chứa tác giả và ngày


465

Làm cách nào tôi có thể hiển thị đầu ra nhật ký git với (ít nhất) thông tin này:

* author
* commit date
* change

Tôi muốn nó được nén thành một dòng trên mỗi mục nhật ký. Định dạng ngắn nhất có thể cho điều đó là gì?

(đã thử --format=onelinenhưng không hiển thị ngày)


2
Có thể bạn thích phiên bản màu của tôi: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Câu trả lời:


699

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

đã làm công việc. Kết quả này:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Lấy cảm hứng từ câu hỏi stackoverflow: "git log output như svn ls -v" , tôi phát hiện ra rằng tôi có thể thêm các thông số chính xác mà tôi cần.

Để rút ngắn ngày (không hiển thị thời gian) sử dụng --date=short

Trong trường hợp bạn tò mò các tùy chọn khác nhau là gì:
%h= viết tắt commit hash
%x09= tab (ký tự cho mã 9)
%an= tên
%adtác giả = ngày tác giả (định dạng tôn trọng --date = tùy chọn)
%s= chủ đề
Từ kernel.org/pub/software/scm /git/docs/git-log.html (phần FORMATS PRETTY) theo nhận xét của Vivek.


6
... và cũng rất hữu ích khi thêm date=shortnhư cdunn2001 gợi ý trong một câu trả lời khác
Jesper Rønn-Jensen

10
Yêu thích (viết tắt) của tôi oneliner bây giờ là ngày trao đổi trước khi tác giả và sử dụng ngày ngắn:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Ronn-Jensen

143
Thêm gia vị với màu sắc và cũng hiển thị các ref:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan

16
Bảng cột có chiều rộng cố định:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

15
Trong trường hợp bạn tò mò các tùy chọn khác nhau là gì:% h = hash hash commit,% x09 = tab (ký tự cho mã 9),% an = tên tác giả,% ad = ngày tác giả (định dạng tôn trọng --date = tùy chọn), % s = chủ đề. Từ kernel.org/pub/software/scm/git/docs/git-log.html (phần ĐỊNH DẠNG PRETTY)
Vivek

204

Tôi sử dụng hai cài đặt .gitconfig này:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% quảng cáo là ngày tác giả, có thể được ghi đè bởi --datehoặc tùy chọn được chỉ định trong khổ [log] trong .gitconfig. Tôi thích ngày tương đối vì nó mang lại cảm giác ngay lập tức khi mọi thứ được đưa ra. Đầu ra trông như thế này:

6c3e1a2 2 hours ago you@me.com lsof is a dependency now.
0754f18 11 hours ago you@me.com Properly unmount, so detaching works.
336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails
be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago you@me.com Shorten while loops

Tất nhiên đây là màu sắc, vì vậy thật dễ dàng để phân biệt các phần khác nhau của một dòng nhật ký. Ngoài ra, nó là mặc định khi gõ git logvì phần [định dạng].

CẬP NHẬT 2014: Vì git hiện hỗ trợ phần đệm nên tôi có một sửa đổi tốt cho phiên bản trên:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

Bên phải này căn chỉnh các ngày tương đối và bên trái sắp xếp các tên committer, có nghĩa là bạn có một giao diện giống như cột dễ nhìn.

Ảnh chụp màn hình

  ss # 1

CẬP NHẬT 2016: Vì việc ký cam kết GPG đang trở thành một điều, tôi nghĩ rằng tôi sẽ cập nhật bài đăng này với một phiên bản bao gồm xác minh chữ ký (trong ảnh chụp màn hình đó là chữ magenta ngay sau khi cam kết). Một lời giải thích ngắn về cờ:

% G?: Hiển thị "G" cho chữ ký tốt (hợp lệ), "B" cho chữ ký xấu, "U" cho chữ ký tốt không có giá trị không xác định và "N" không có chữ ký

Những thay đổi khác bao gồm:

  • màu sắc hiện bị loại bỏ nếu đầu ra là thứ gì đó không phải là tty (rất hữu ích cho việc grepping, v.v.)
  • git log -g bây giờ có chứa bộ chọn reflog.
  • Lưu 2 parens vào tên và đặt chúng ở cuối (để duy trì căn chỉnh cột)
  • Cắt ngắn ngày tương đối nếu chúng quá dài (ví dụ 3 years, 4..)
  • Cắt bớt tên người viết hoa (có thể hơi ngắn đối với một số ppl, chỉ cần thay đổi %<(7,trunc)hoặc kiểm tra tính năng git .mailmap để rút ngắn tên người đi làm)

Đây là cấu hình:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

Tất cả trong tất cả các liên kết cột hiện được bảo tồn tốt hơn rất nhiều với chi phí của một số nhân vật (hy vọng) vô dụng. Vui lòng chỉnh sửa nếu bạn có bất kỳ cải tiến nào, tôi muốn tạo màu sắc cho thông điệp tùy thuộc vào việc một cam kết có được ký hay không, nhưng dường như điều đó không thể xảy ra.

Ảnh chụp màn hình

Ảnh chụp màn hình của nhật ký git


3
Bạn có thể rút ngắn các dòng thậm chí nhiều hơn bằng cách sử dụng một sơ đồ thư . Tôi đã viết tắt tên của các đồng nghiệp tại nơi làm việc của tôi xuống để chỉ tên đầu tiên của họ :-)
andsens

2
Các câu trả lời định dạng --pretty là tốt và tigcâu trả lời cho khả năng tương tác không cần cấu hình, nhưng câu trả lời này rất tuyệt - nó cung cấp đầu ra một dòng được yêu cầu (có màu để khởi động!) Bằng cách sử dụng lệnh 'git log' tiêu chuẩn. Rất đẹp.
Brent Faust

Khi sử dụng - right-left, tôi không nhận được > <dấu nữa. Đã thử thêm %mvào định dạng, nhưng sau đó >xuất hiện mọi lúc, ngay cả đối với bình thường git log. Bất kỳ manh mối làm thế nào để có dấu hành xử bình thường với định dạng?
Vituel 18/03/2016

1
@AlvaroCavalcanti chắc chắn không có vấn đề gì! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ TrầnViệtHoàng --onelinechỉ là một bí danh cho --pretty=oneline. format.prettylà định dạng đẹp mặc định, nhưng không có cách nào để ghi đè format.onelineafaik. Những gì tôi sẽ làm là bỏ qua pretty = shortlogdòng trong cấu hình và sau đó tạo bí danh để chạy git log --pretty=shortlog.
andsens

99
git log --pretty=format:"%H %an %ad"

sử dụng --date=để đặt định dạng ngày

git log --pretty=format:"%H %an %ad" --date=short

1
Tuyệt quá! Lần tới có lẽ tôi sẽ chỉ sử dụng% h trên% H vì hàm băm chỉ là vô nghĩa đối với mắt người của tôi :)
Jesper Rønn-Jensen

Như bạn ước. tôi chỉ đưa ra một ví dụ đơn giản;)
knittl

2
Mát mẻ! Tôi đã không biết về --date = short
Jesper Rønn-Jensen

3
Chỉ cần ném cái này ra khỏi đó (trễ 8 năm): hàm băm có thể trông vô nghĩa, nhưng nó là một công cụ hữu ích nếu bạn muốn anh đào hoặc so sánh các cam kết. Thường thì bạn liệt kê hàm băm không phải vì nó có ý nghĩa, mà vì nó đã được sử dụng
stevendesu

81

Hãy sử dụng cái này:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Lưu ý -7ở cuối, để chỉ hiển thị 7 mục cuối cùng.

Nhìn:

nhập mô tả hình ảnh ở đây


3
--date=shortcó thể được thêm vào để làm cho nó ngắn hơn.
xuhdev

@Hannes, tên chi nhánh ở đâu?
Pacerier

@Pacerier git logluôn hiển thị lịch sử của chi nhánh hiện đang được kiểm tra.
Hannes Schneidermayer

Thêm vào %dđể khôi phục "tên ref" như thế nào (HEAD -> master).
2540625

Tại sao sử dụng resetthay vì auto?
2540625

49

tig là một thay thế có thể để sử dụng nhật ký git , có sẵn trên các bản phân phối * nix mã nguồn mở chính.

Trên debian hoặc ubfox hãy thử cài đặt và chạy như sau:

$ sudo apt-get install tig

(tig được cài đặt)

$ tig

(nhật ký được hiển thị trong máy nhắn tin như sau, với hàm băm hiện tại được hiển thị ở phía dưới)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Vì markdown không hỗ trợ tô màu văn bản, hãy tưởng tượng: cột 1: màu xanh; cột 2: màu xanh lá cây; cột 3: màu văn bản mặc định. Dòng cuối cùng, được tô sáng. Nhấn Q hoặc q để thoát.


tigbiện minh cho các cột không có các cạnh bị rách , điều mà tab ascii (% x09) không đảm bảo.

Đối với một ngày ngắn dạng hit vốn D (lưu ý: chữ thường d mở ra một cái nhìn khác.) Cấu hình nó vĩnh viễn bằng cách thêm show-date = shortvào ~ / .tigrc; hoặc trong một[tig] phần trong .git / configure hoặc ~ / .gitconfig.

Để xem toàn bộ thay đổi :

  • nhấn Enter . Một khung phụ sẽ mở ở nửa dưới của cửa sổ.
  • sử dụng các phím k , j để cuộn thay đổi trong khung phụ.
  • đồng thời, sử dụng các phím lên , xuống để chuyển từ cam kết sang cam kết.

Vì tig tách biệt với git và rõ ràng là * nix cụ thể, nên có lẽ cần cygwin để cài đặt trên windows. Nhưng đối với fedora tôi tin rằng các cài đặt lệnh là $ su, (enter root password), # yum install tig. Đối với freebsd thử % su, (enter root password), # pkg_add -r tig.


Nhân tiện, tig tốt cho nhiều thứ hơn là xem nhanh nhật ký: Ảnh chụp màn hình & Thủ công


vui lòng cung cấp ví dụ đầy đủ. Viết tigtrong bảng điều khiển của tôi chỉ đơn giản là gây ra lỗi cho tôi-bash: tig: command not found
Jesper Rønn-Jensen

10
ồ công cụ này là tuyệt vời, và nhanh chóng đáng ngạc nhiên! bia cài đặt tig
đấu bò

nếu bạn sử dụng mac, hãy cài đặt tig
Pedro Brasileiro

1
trên Windows, người dùng babun có thểpact install tig
obojdi

34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

hoặc là

git log --pretty=format:'%h %ad %s | %an' --date=short  

... kiểm tra câu trả lời của cdunn2001 ở trên: Tôi sẽ mất e = mail của tác giả và chỉ bao gồm tên của tác giả, theo Jesper và knittl, nhưng phù hợp với ý tưởng của cdunn2001 về việc duy trì đầu ra trong các cột có chiều rộng không đổi để dễ đọc ( ý tưởng tuyệt vời!). Tuy nhiên, thay cho một cột hợp lý bên trái riêng biệt cho tên tác giả, tôi bọc cờ đó ở cuối lệnh bằng dấu ngoặc đơn hoặc bù nó bằng một đường ống. (Thực sự có thể là bất kỳ nhân vật nào đóng vai trò hỗ trợ trực quan trong việc đọc đầu ra ... mặc dù có thể có ý nghĩa để tránh các dấu gạch chéo ngược hoặc chuyển tiếp để giảm nhầm lẫn đầu ra với một thư mục hoặc thứ gì đó.)

Đầu ra mẫu:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac

31

Sử dụng bí danh git được xác định trước, nghĩa là:

$ git work

Tạo một lần bằng lệnh:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

Hoặc nhiều màu hơn với biểu đồ:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

nhập mô tả hình ảnh ở đây


Vâng, tôi thích cái này!
Alex

8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Kết quả:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

Thứ chiều rộng không đổi là đầu tiên. Phần ít quan trọng nhất - tên miền email - là phần cuối cùng và dễ lọc.


4

Để thể hiện những cam kết tôi đã dàn dựng sẵn sàng thúc đẩy tôi làm

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

Đầu ra trông giống như:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Trong đó cột đầu tiên xuất hiện màu vàng và 'H' 'm' và 't' trong ngoặc đơn hiển thị TRỤ, chủ và thân và xuất hiện trong các màu "- trang trí" thông thường của chúng

Đây là phần ngắt dòng để bạn có thể thấy những gì nó đang làm:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

Tôi đã bí danh để "dàn dựng" với:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(Có cách nào dễ dàng hơn để thoát khỏi điều đó không? Có một chút khó khăn để tìm ra những gì cần thoát)


Phiên bản hiện tại của tập lệnh này là ~ 300LOC và còn nhiều hơn thế: - tùy chọn chuyển đổi thông báo cam kết trực tuyến / đa dòngil - hiển thị khoảng trắng / dòng kết thúc ở chế độ trực tuyến. ví dụ: - chỉ định phạm vi thông qua param¶ - Đánh dấu vấn đề # 's¶ - tô sáng / ^ - (Khắc phục | Thêm | Tái cấu trúc) / trong thông báo cam kết¶
Sam Hasler

Đối với trích dẫn bí danh mạnh mẽ tự động, xem câu trả lời này . Muốn chia sẻ ~ 300LOC của bạn trong một ý chính?
Tom Hale

Cảm ơn Tom! nếu tôi làm tròn để đăng kịch bản đó (tôi cần xóa một số nội dung cụ thể / bí mật của công ty) tôi sẽ ping bạn ở đây.
Sam Hasler

1

Tất cả các đề xuất nói trên sử dụng %sgiữ chỗ cho chủ đề. Tôi sẽ khuyên bạn nên sử dụng %B%sđịnh dạng bảo tồn các dòng mới và nhiều dòng tin nhắn cam kết xuất hiện bị bẹp.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

0

Chạy này trong thư mục dự án:

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

Và nếu bạn thích, hãy thêm dòng này vào ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all

0

Hãy thử git log --pretty = fuller, nó sẽ hiển thị cho bạn: - Tác giả: Ngày tác giả: Cam kết: Ngày cam kết:

Hi vọng điêu nay co ich.

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.