Bagaimana saya bisa melihat log git dari hanya satu komitmen pengguna?

1258

Saat menggunakan git log, bagaimana saya bisa memfilter menurut pengguna sehingga saya hanya melihat komitmen dari pengguna itu?

markdorison
sumber
4
Apakah ada cara untuk melihat hal yang sama secara langsung github?
Vadorequest
1
Untuk melakukan ini di github: stackoverflow.com/a/23515164/26510
Brad Parks

Jawaban:

1715

Ini berfungsi untuk keduanya git logdan gitk- 2 cara paling umum untuk melihat riwayat.
Anda tidak perlu menggunakan seluruh nama:

git log --author="Jon"

akan cocok dengan komit yang dibuat oleh "Jonathan Smith"

git log --author=Jon

dan

git log --author=Smith

juga akan bekerja. Kutipan bersifat opsional jika Anda tidak membutuhkan spasi.

Tambahkan --alljika Anda bermaksud mencari semua cabang dan bukan hanya leluhur komit saat ini di repo Anda.

Anda juga dapat dengan mudah mencocokkan beberapa penulis karena regex adalah mekanisme yang mendasari filter ini. Jadi, untuk membuat daftar komitmen oleh Jonathan atau Adam, Anda dapat melakukan ini:

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

Untuk mengecualikan komit oleh penulis atau set penulis tertentu menggunakan ekspresi reguler seperti yang disebutkan dalam pertanyaan ini , Anda dapat menggunakan lookahead negatif dalam kombinasi dengan --perl-regexpsakelar:

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

Atau, Anda dapat mengecualikan komit yang dibuat oleh Adam dengan menggunakan bashdan mengirim piping:

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

Jika Anda ingin mengecualikan komitmen yang dilakukan (tetapi tidak harus ditulis) oleh Adam, ganti %andengan %cn. Rincian lebih lanjut tentang ini ada di posting blog saya di sini: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
sumber
9
Apakah ada cara untuk melakukan yang sebaliknya? Katakan - Saya ingin melihat semua komitmen kecuali untuk Jon.
Ian Robinson
4
@Ian untuk git help log "Jon" adalah ekspresi reguler jadi seharusnya cukup mudah
sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk
4
Adakah cara untuk membuat gitkcuti dari komitmen orang tua dari penulis lain? (Mereka ditunjukkan dengan lingkaran putih.) Sebaliknya, git log --graphtidak menunjukkan komitmen induk; itu hanya menunjukkan komitmen penulis yang diberikan. Saya ingin melihat output yang sama di gitk. (Sudah memeriksa Preferensi dan Edit Tampilan - tidak dapat menemukan sesuatu yang bermanfaat.)
ADTC
2
Waspadalah ini peka huruf besar kecil
Chiel ten Brinke
49
git log --author="that user"
wilhelmtell
sumber
44

Di github ada juga cara rahasia ...

Anda dapat memfilter komit oleh penulis dalam tampilan komit dengan menambahkan param ?author=github_handle. Misalnya, tautan https://github.com/dynjs/dynjs/commits/master?author=jingweno memperlihatkan daftar komitmen pada proyek Dynjs

slott
sumber
1
cara apa pun untuk melihat lintas cabang? sesuatu seperti komit / semua?
whizcreed
Bagaimana Anda menemukan ini? Apa bendera lain yang didukung?
Woodrow Barlow
1
Jawaban pro.mean bagaimana melakukan ini melalui antarmuka: stackoverflow.com/a/39123694/1225617
Adam Millerchip
Saya tidak suka jawaban ini karena pertanyaannya terkait dengan perangkat lunak dan tidak terkait dengan layanan tertentu.
Valerio Bozz
Pertanyaannya hanyalah bagaimana melihat log git - terlepas dari teknologi. Jadi jawaban ini sesuai dengan tagihan.
slot
31
git help log

memberi Anda halaman manual git log. Cari "penulis" di sana dengan menekan / dan kemudian mengetik "penulis", diikuti oleh Enter. Ketik "n" beberapa kali untuk sampai ke bagian yang relevan, yang mengungkapkan:

git log --author="username"

seperti yang sudah disarankan.

Perhatikan bahwa ini akan memberi Anda penulis komit, tetapi di Git, penulis dapat seseorang yang berbeda dari committer (misalnya dalam kernel Linux, jika Anda mengirimkan tambalan sebagai pengguna biasa, itu mungkin dilakukan oleh pengguna administratif lain .) Lihat Perbedaan antara penulis dan pengangkat di Git? untuk lebih jelasnya)

Sebagian besar waktu, apa yang disebut sebagai pengguna adalah pengalih dan pengarang.

ustun
sumber
21
@ James, saya pikir negativitas Anda di sini tidak beralasan. Saya hanya mencoba mengajarinya cara mencarinya dari baris perintah kalau-kalau dia lupa. Saya pikir Anda salah mengira saya sebagai orang yang baru saja mengatakan RTFM, tetapi saya memasukkan jawabannya dalam tanggapan saya.
ustun
11
Itu bukan negatif. Fakta bahwa orang-orang datang ke sini untuk meminta saran, dan banyak orang ingin merespons dengan beberapa varian RTFM. Menjadi pertanda buruk bagi komunitas.
James
11
@ James, aku harus setuju dengan kita, di sini. Dia memang menjawab pertanyaan itu, dan dia menawarkan strategi untuk menemukan jawaban yang bermanfaat untuk menemukan jawaban atas pertanyaan lain yang berkaitan dengan git.
Peter
4
Saya tidak berpikir ini hitam dan putih seperti ini. Sekarang, saya setuju dengan unstun bahwa kita harus mendidik orang bagaimana melakukan sesuatu untuk diri mereka sendiri - itu ide yang bagus. Dimana unstun melakukan kesalahan sedikit adalah membuat asumsi a) Bahwa OP tahu cara mencari halaman manual, dan yang lebih penting b) Bahwa OP tahu untuk mencari 'penulis'. Mereka mungkin mencari 'committer' atau 'name' atau sesuatu.
John Hunt
6
@ JohnHunt kamu benar, tidak pernah terpikir olehku untuk menjelaskan apa arti pencarian dan bagaimana itu dilakukan pada saat itu. Agak mengira itu. Memperbaiki teks sedikit.
ustun
23

Untuk menarik lebih detail - (Di sini %anmerujuk pada penulis)

Gunakan ini :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Sireesh Yarlagadda
sumber
Dan jika Anda ingin format alamat email mereka gunakan %aebukan %an(yang memberi nama.)
MarkHu
--authorsebenarnya mencari berdasarkan nama penulis dan bukan nama pengalih. Saya akan berubah "username"menjadi penulis
Algoritma
17
cat | git log --author="authorName" > author_commits_details.txt

Ini memberikan komitmen Anda dalam format teks.

Johnsa Philip
sumber
20
Apa tujuan dari cat |?
Keith Thompson
3
@KeithThompson Untuk mengejar mouse.
nvd
14

Jika Anda ingin memfilter komitmen Anda sendiri:

git log --author="<$(git config user.email)>"
Luca Faggianelli
sumber
1
Ia juga bekerja tanpa tanda kutip dan tanda kurung (setidaknya pada git bash dan ubuntu bash).
Lavamantis
12

Anda bahkan dapat menyingkat ini sedikit dengan hanya menggunakan bagian dari nama pengguna:

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

coba alat ini https://github.com/kamranahmedse/git-standup

Pemakaian

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

Di bawah ini adalah deskripsi untuk masing-masing bendera

- `-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
InsaneBot
sumber
6

Karena pertanyaan lain (mungkin salah?) Dikunci, saya hanya akan meletakkan ini di sini:

perlihatkan penulis dengan jumlah komit mereka:

git shortlog -nse

temukan semua komitmen untuk USERNAME tertentu:

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

Perlihatkan n jumlah log untuk x pengguna berwarna dengan menambahkan potongan kecil ini dalam file .bashrc Anda.

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

Untuk menampilkan 10 komitmen terakhir oleh Frank:

l 10 frank

Untuk menampilkan 20 komitmen terakhir oleh siapa pun:

l 20

Frank Forte
sumber
4

Jika menggunakan GitHub:

  • pergi ke cabang
  • klik komit

itu akan menampilkan daftar dalam format di bawah ini

branch_x: < comment> 
author_name committed 2 days ago
  • untuk melihat komitmen masing-masing penulis; klik pada author_name dan di sana Anda dapat melihat semua komit dari penulis itu di cabang itu
diEcho
sumber
2
Itu banyak klik dan mengasumsikan host git repo. Tidak menjawab CLI seperti yang banyak dilakukan di atas.
lacostenycoder
1
@ lacostenycoder tetapi ini informasi yang berguna, terutama karena begitu banyak proyek git ada di GitHub!
Adam Millerchip
2

Anda dapat menggunakan = atau "spasi". Misalnya, mengikuti dua perintah, kembalikan sama

git log --author="Developer1"

git log --author "Developer1"
Harshainfo
sumber
1

Kasus saya: Saya menggunakan kode sumber, saya mengikuti langkah-langkah berikut:

  1. Ditekan CRL+3
  2. Penulis dropdown yang diubah
  3. Mengetik nama "Vinod Kumar"

masukkan deskripsi gambar di sini

Vinod Kumar
sumber
1

Meskipun, ada banyak jawaban yang bermanfaat. Padahal, hanya menambahkan cara lain untuk itu. Anda juga bisa menggunakan

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

Ini akan menampilkan output dalam cara yang dikelompokkan:

<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

Di sini, total 5 komit dilakukan di <Author Name>bawah cabang saat ini. Sedangkan, Anda juga dapat menggunakan --alluntuk menegakkan pencarian di mana-mana (semua cabang) di repositori git.

Satu tangkapan: git secara internal mencoba mencocokkan input <author name>dengan nama dan email penulis di basis data git. Ini case-sensitive .

surajs1n
sumber