เมื่อใช้git log
ฉันจะกรองโดยผู้ใช้อย่างไรเพื่อให้ฉันเห็นเฉพาะการกระทำจากผู้ใช้รายนั้น
เมื่อใช้git log
ฉันจะกรองโดยผู้ใช้อย่างไรเพื่อให้ฉันเห็นเฉพาะการกระทำจากผู้ใช้รายนั้น
คำตอบ:
สิ่งนี้ใช้ได้ทั้งgit log
และgitk
- 2 วิธีที่ใช้กันทั่วไปในการดูประวัติ
คุณไม่จำเป็นต้องใช้ชื่อเต็ม:
git log --author="Jon"
จะจับคู่ความมุ่งมั่นของ "Jonathan Smith"
git log --author=Jon
และ
git log --author=Smith
ก็จะทำงานเช่นกัน คำพูดเป็นตัวเลือกถ้าคุณไม่ต้องการช่องว่างใด ๆ
เพิ่ม--all
ถ้าคุณตั้งใจจะค้นหาสาขาทั้งหมดและไม่ใช่เพียงบรรพบุรุษของการกระทำปัจจุบันใน repo ของคุณ
คุณสามารถจับคู่กับผู้เขียนหลายคนได้อย่างง่ายดายเนื่องจาก regex เป็นกลไกพื้นฐานสำหรับตัวกรองนี้ ดังนั้นในการทำรายการโดย Jonathan หรือ Adam คุณสามารถทำได้:
git log --author="\(Adam\)\|\(Jon\)"
ในการแยกการกระทำโดยผู้เขียนหรือชุดของผู้เขียนโดยใช้การแสดงออกปกติตามที่ระบุไว้ในคำถามนี้คุณสามารถใช้lookahead เชิงลบร่วมกับ--perl-regexp
สวิตช์:
git log --author='^(?!Adam|Jon).*$' --perl-regexp
อีกวิธีหนึ่งคุณสามารถยกเว้นการคอมมิทที่สร้างโดย Adam โดยการใช้bash
และ piping:
git log --format='%H %an' |
grep -v Adam |
cut -d ' ' -f1 |
xargs -n1 git log -1
หากคุณต้องการยกเว้นกระทำมุ่งมั่น ( แต่ไม่จำเป็นต้องประพันธ์) โดยอดัมแทนที่ด้วย%an
%cn
รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้อยู่ในโพสต์บล็อกของฉันที่นี่: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/
gitk
ผู้ปกครองออกจากพันธะของผู้เขียนคนอื่น (แสดงด้วยวงกลมสีขาว) ในทางกลับกันgit log --graph
จะไม่แสดงความมุ่งมั่น มันแสดงให้เห็นถึงความมุ่งมั่นของผู้เขียนที่ได้รับเท่านั้น gitk
ฉันชอบที่จะเห็นผลลัพธ์เดียวกันใน (ตรวจสอบการกำหนดค่าตามความชอบและแก้ไขการดูแล้ว - ไม่พบสิ่งใดมีประโยชน์)
git log --author="that user"
ใน GitHub ยังมีวิธีลับ ...
?author=github_handle
คุณสามารถกรองกระทำโดยผู้เขียนในมุมมองกระทำโดยการผนวกพระราม ตัวอย่างเช่นลิงก์https://github.com/dynjs/dynjs/commits/master?author=jingwenoจะแสดงรายการของความมุ่งมั่นต่อโครงการ Dynjs
git help log
ให้ manpage ของบันทึกการคอมไพล์ ค้นหา "ผู้แต่ง" ที่นั่นโดยกด / จากนั้นพิมพ์ "ผู้แต่ง" ตามด้วย Enter พิมพ์ "n" สองสามครั้งเพื่อไปที่หัวข้อที่เกี่ยวข้องซึ่งจะแสดง:
git log --author="username"
ตามที่แนะนำไว้แล้ว
โปรดทราบว่าสิ่งนี้จะทำให้คุณเป็นผู้เขียนข้อผูกพัน แต่ใน Git ผู้เขียนอาจเป็นคนที่แตกต่างจากผู้ส่ง (ตัวอย่างเช่นใน Linux kernel หากคุณส่งแพทช์ในฐานะผู้ใช้ธรรมดา .) ดูความแตกต่างระหว่างผู้แต่งและผู้เดินทางใน Git หรือไม่ สำหรับรายละเอียดเพิ่มเติม)
ส่วนใหญ่สิ่งหนึ่งที่อ้างถึงเป็นผู้ใช้เป็นทั้งผู้ส่งและผู้เขียน
เพื่อดึงรายละเอียดเพิ่มเติม - (ที่นี่%an
หมายถึงผู้เขียน)
ใช้สิ่งนี้: -
git log --author="username" --pretty=format:"%h - %an, %ar : %s"
%ae
แทน%an
(ซึ่งได้รับชื่อ)
--author
ค้นหาตามชื่อจริงของผู้แต่งไม่ใช่ชื่อผู้ติดต่อ ฉันจะเปลี่ยน"username"
เป็นผู้เขียน
cat | git log --author="authorName" > author_commits_details.txt
สิ่งนี้จะช่วยให้คุณผูกพันในรูปแบบข้อความ
cat |
คืออะไร?
หากคุณต้องการกรองการกระทำของคุณเอง:
git log --author="<$(git config user.email)>"
คุณสามารถย่อส่วนนี้ได้เพียงแค่ใช้ชื่อผู้ใช้:
git log --author=mr #if you're looking for mrfoobar's commits
ลองใช้เครื่องมือนี้ https://github.com/kamranahmedse/git-standup
```bash
$ git standup [-a <author name>]
[-w <weekstart-weekend>]
[-m <max-dir-depth>]
[-f]
[-L]
[-d <days-ago>]
[-D <date-format>]
[-g]
[-h]
```
ด้านล่างนี้เป็นคำอธิบายสำหรับแต่ละธง
- `-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
เนื่องจากคำถามอื่นถูกล็อค (อาจผิดโดยงั้นเหรอ?) ฉันจะใส่นี่:
แสดงผู้แต่งด้วยจำนวนการกระทำ:
git shortlog -nse
ค้นหาข้อผูกพันทั้งหมดสำหรับ USERNAME เฉพาะ:
git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show
แสดงจำนวนบันทึกของ n ผู้ใช้ x ในสีโดยเพิ่มข้อมูลโค้ดนี้ลงในไฟล์. bashrc ของคุณ
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
ในการแสดงการผูกพัน 10 ครั้งล่าสุดโดย Frank:
l 10 frank
ในการแสดงการผูกพัน 20 ครั้งล่าสุดโดยทุกคน:
l 20
หากใช้ GitHub:
มันจะแสดงรายการในรูปแบบด้านล่าง
branch_x: < comment>
author_name committed 2 days ago
คุณสามารถใช้ = หรือ "ช่องว่าง" ตัวอย่างเช่นการติดตามสองคำสั่งจะส่งคืนค่าเดิม
git log --author="Developer1"
git log --author "Developer1"
กรณีของฉัน: ฉันใช้ต้นไม้ต้นกำเนิดฉันทำตามขั้นตอนต่อไปนี้:
CRL+3
แม้ว่าจะมีคำตอบที่เป็นประโยชน์มากมาย ในขณะที่เพียงเพิ่มวิธีอื่น คุณยังสามารถใช้
git shortlog --author="<author name>" --format="%h %s"
มันจะแสดงผลลัพธ์ในลักษณะที่จัดกลุ่ม:
<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
ที่นี่ทั้งหมด 5 กระทำจะกระทำโดย<Author Name>
ภายใต้สาขาปัจจุบัน ในขณะที่คุณยังสามารถใช้--all
บังคับใช้การค้นหาได้ทุกที่(ทุกสาขา)ในที่เก็บ git
One catch: git พยายามจับคู่อินพุต<author name>
กับชื่อและอีเมลของผู้แต่งในฐานข้อมูล git มันเป็นกรณีๆ ไป
github
หรือไม่