Làm cách nào tôi có thể xem nhật ký git của chỉ một cam kết của người dùng?


Câu trả lời:


1715

Điều này hoạt động cho cả hai git loggitk- 2 cách phổ biến nhất để xem lịch sử.
Bạn không cần phải sử dụng toàn bộ tên:

git log --author="Jon"

sẽ khớp với một cam kết được thực hiện bởi "Jonathan Smith"

git log --author=Jon

git log --author=Smith

cũng sẽ làm việc Các trích dẫn là tùy chọn nếu bạn không cần bất kỳ khoảng trắng.

Thêm --allnếu bạn có ý định tìm kiếm tất cả các chi nhánh và không chỉ tổ tiên của cam kết hiện tại trong repo của bạn.

Bạn cũng có thể dễ dàng kết hợp trên nhiều tác giả vì regex là cơ chế cơ bản cho bộ lọc này. Vì vậy, để liệt kê các cam kết của Jonathan hoặc Adam, bạn có thể làm điều này:

git log --author="\(Adam\)\|\(Jon\)"

Để loại trừ các cam kết của một tác giả cụ thể hoặc một nhóm tác giả sử dụng các biểu thức chính quy như đã lưu ý trong câu hỏi này , bạn có thể sử dụng giao diện phủ định kết hợp với công --perl-regexptắc:

git log --author='^(?!Adam|Jon).*$' --perl-regexp

Ngoài ra, bạn có thể loại trừ các xác nhận do Adam ủy quyền bằng cách sử dụng bashvà đường ống:

git log --format='%H %an' | 
  grep -v Adam | 
  cut -d ' ' -f1 | 
  xargs -n1 git log -1

Nếu bạn muốn loại trừ các cam kết được cam kết (nhưng không nhất thiết phải là tác giả) của Adam, hãy thay thế %anbằng %cn. Thông tin chi tiết về điều này có trong bài đăng trên blog của tôi ở đây: http://dymitruk.com/blog/2012/07/18/filtering-by- Author-name /


9
Có cách nào để làm ngược lại? Nói - Tôi muốn xem tất cả các cam kết ngoại trừ Jon's.
Ian Robinson

4
@Ian như đối với git trợ giúp đăng nhập "Jon" là một biểu thức thông thường nên sẽ khá dễ dàng
sumek

2
nhật ký git --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk

4
Bất kỳ cách nào để làm cho gitkcác phụ huynh cam kết từ các tác giả khác? (Chúng được hiển thị với các vòng tròn màu trắng.) Ngược lại, git log --graphkhông hiển thị các cam kết cha mẹ; nó chỉ hiển thị các cam kết của tác giả nhất định. Tôi rất thích nhìn thấy đầu ra tương tự trong gitk. (Đã kiểm tra Tùy chọn và Chế độ xem Chỉnh sửa - không thể tìm thấy bất cứ điều gì hữu ích.)
ADTC

2
Coi chừng đây là trường hợp nhạy cảm
Chiel ten Brinke


44

Trên github cũng có một cách bí mật ...

Bạn có thể lọc các xác nhận của tác giả trong chế độ xem cam kết bằng cách nối thêm param ?author=github_handle. Ví dụ: liên kết https://github.com/dynjs/dynjs/commits/master?master=jingweno hiển thị danh sách các cam kết cho dự án Dynjs


1
bất kỳ cách nào để xem qua các chi nhánh? một cái gì đó như cam kết / tất cả?
whizcreed

Làm thế nào bạn tìm thấy điều này? Những lá cờ khác được hỗ trợ?
Woodrow Barlow

1
câu trả lời của pro.mean làm thế nào để thực hiện điều này qua giao diện: stackoverflow.com/a/39123694/1225617
Adam Millerchip

Tôi không thích câu trả lời này vì câu hỏi liên quan đến một phần mềm và không liên quan đến một dịch vụ cụ thể.
Valerio Bozz

Câu hỏi chỉ là làm thế nào để xem nhật ký git - bất kể công nghệ. Vì vậy, câu trả lời này phù hợp với hóa đơn tốt.
slott

31
git help log

cung cấp cho bạn các trang web của nhật ký git. Tìm kiếm "tác giả" ở đó bằng cách nhấn / và sau đó nhập "tác giả", theo sau là Enter. Nhập "n" một vài lần để đến phần có liên quan, điều này cho thấy:

git log --author="username"

như đã đề xuất.

Lưu ý rằng điều này sẽ cung cấp cho bạn tác giả của các cam kết, nhưng trong Git, tác giả có thể là một người khác với committer (ví dụ: trong nhân Linux, nếu bạn gửi một bản vá như một người dùng thông thường, nó có thể được cam kết bởi một người dùng quản trị khác .) Xem sự khác biệt giữa tác giả và người đi làm trong Git? để biết thêm chi tiết)

Hầu hết thời gian, những gì một người đề cập đến như người dùng là cả người đi làm và tác giả.


21
@James Tôi nghĩ rằng sự tiêu cực của bạn ở đây là không có cơ sở. Tôi chỉ đơn giản là cố gắng dạy anh ta cách tìm kiếm nó từ dòng lệnh trong trường hợp anh ta quên. Tôi nghĩ rằng bạn đang nhầm tôi với một người chỉ nói RTFM, nhưng tôi đã đưa câu trả lời vào câu trả lời của mình.
ustun

11
Đó không phải là tiêu cực. Đó là thực tế rằng mọi người đến đây để xin lời khuyên, và rất nhiều người muốn phản hồi với một số biến thể của RTFM. Mã kém cho cộng đồng.
James

11
@James Tôi phải đồng ý với ustun ở đây. Anh ấy đã trả lời câu hỏi, anh ấy đưa ra một chiến lược để tìm câu trả lời hữu ích cho việc tìm câu trả lời cho các câu hỏi liên quan đến git khác.
Peter

4
Tôi không nghĩ nó khá đen và trắng như thế này. Bây giờ, tôi đồng ý với unstun rằng chúng ta nên giáo dục mọi người cách tự làm mọi thứ - đó là một ý tưởng tốt. Trường hợp unstun đã sai một chút là đưa ra các giả định a) Rằng OP biết cách tìm kiếm trang người đàn ông và quan trọng hơn là b) Điều đó OP biết để tìm kiếm 'tác giả'. Họ có thể đã tìm kiếm 'committer' hoặc 'name' hoặc một cái gì đó.
John Hunt

6
@ JohnHunt bạn nói đúng, tôi chưa bao giờ xảy ra với tôi để giải thích ý nghĩa của việc tìm kiếm và cách thức thực hiện tại thời điểm đó. Loại giả định nó. Sửa văn bản một chút.
ustun

23

Để biết thêm chi tiết - (Ở đây %anđề cập đến tác giả)

Dùng cái này :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"

Và nếu bạn muốn địa chỉ Email của họ sử dụng định dạng %aethay vì %an(đã đặt tên.)
MarkHu

--authorthực sự tìm kiếm theo tên tác giả và không phải tên committer. Tôi sẽ đổi "username"thành tác giả
Thuật toán

17
cat | git log --author="authorName" > author_commits_details.txt

Điều này cung cấp cho cam kết của bạn ở định dạng văn bản.


20
Mục đích của là cat |gì?
Keith Thompson

3
@KeithThndry Để đuổi theo một con chuột.
nvd

14

Nếu bạn muốn lọc các cam kết của riêng bạn:

git log --author="<$(git config user.email)>"

1
Nó cũng hoạt động mà không có dấu ngoặc kép và dấu ngoặc (ít nhất là trên git bash và ub Ubuntu bash).
Lavamantis

12

Bạn thậm chí có thể viết tắt điều này một chút bằng cách sử dụng một phần tên người dùng:

git log --author=mr  #if you're looking for mrfoobar's commits

11

dùng thử công cụ này https://github.com/kamranahmedse/git-standup

Sử dụng

```bash
$ git standup [-a <author name>] 
              [-w <weekstart-weekend>] 
              [-m <max-dir-depth>]
              [-f]
              [-L]
              [-d <days-ago>]
              [-D <date-format>] 
              [-g] 
              [-h]
```

Dưới đây là mô tả cho mỗi cờ

- `-a`      - Specify author to restrict search to (name or email)
- `-w`      - Specify weekday range to limit search to (e.g. `git standup -w SUN-THU`)
- `-m`      - Specify the depth of recursive directory search
- `-L`      - Toggle inclusion of symbolic links in recursive directory search
- `-d`      - Specify the number of days back to include
- `-D`      - Specify the date format for "git log" (default: relative)
- `-h`      - Display the help screen
- `-g`      - Show if commit is GPG signed or not
- `-f`      - Fetch the latest commits beforehand

6

Vì câu hỏi khác đã bị khóa (có thể sai?), Tôi sẽ chỉ đặt câu hỏi này ở đây:

hiển thị các tác giả với số lượng cam kết của họ:

git shortlog -nse

tìm tất cả các cam kết cho USERNAME cụ thể:

git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show

5

Hiển thị n số nhật ký cho người dùng x màu bằng cách thêm đoạn mã nhỏ này vào tệp .bashrc của bạn.

gitlog() {
    if [ "$1" ] && [ "$2" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1" --author="$2"
    elif [ "$1" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1"
    else
        git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order
    fi
}

alias l=gitlog

Để hiển thị 10 cam kết cuối cùng của Frank:

l 10 frank

Để hiển thị 20 cam kết cuối cùng của bất kỳ ai:

l 20


4

Nếu sử dụng GitHub:

  • đi đến chi nhánh
  • nhấp vào cam kết

nó sẽ hiển thị danh sách ở định dạng dưới đây

branch_x: < comment> 
author_name committed 2 days ago
  • để xem cam kết của tác giả cá nhân; nhấp vào Author_name và ở đó bạn có thể thấy tất cả các cam kết của tác giả đó trên nhánh đó

2
Đó là rất nhiều nhấp chuột và giả định lưu trữ git repo. Không trả lời CLI như nhiều người ở trên đã làm.
lacostenycoder

1
@lacostenycoder nhưng đó là thông tin hữu ích, đặc biệt là có rất nhiều dự án git trên GitHub!
Adam Millerchip

2

Bạn có thể sử dụng = hoặc "dấu cách". Ví dụ sau hai lệnh trả về giống nhau

git log --author="Developer1"

git log --author "Developer1"

1

Trường hợp của tôi: Tôi đang sử dụng cây nguồn, tôi đã làm theo các bước sau:

  1. Ép CRL+3
  2. Thay đổi tác giả thả xuống
  3. Gõ tên "Vinod Kumar"

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


1

Mặc dù, có rất nhiều câu trả lời hữu ích. Trong khi đó, chỉ để thêm một cách khác cho nó. Bạn cũng có thể dùng

git shortlog --author="<author name>" --format="%h %s"

Nó sẽ hiển thị đầu ra theo cách được nhóm:

<Author Name> (5):
  4da3975f dependencies upgraded
  49172445 runtime dependencies resolved
  bff3e127 user-service, kratos, and guava dependencies upgraded
  414b6f1e dropwizard :- service, rmq and db-sharding depedencies upgraded
  a96af8d3 older dependecies removed

Ở đây, tổng cộng 5 cam kết được thực hiện bởi <Author Name>chi nhánh hiện tại. Trong khi đó, bạn cũng có thể sử dụng --allđể thực thi tìm kiếm ở mọi nơi (tất cả các chi nhánh) trong kho git.

Một lưu ý: git trong nội bộ cố gắng khớp một đầu vào <author name>với tên và email của tác giả trong cơ sở dữ liệu git. Nó là trường hợp nhạy cảm .

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.