Come posso visualizzare un registro git dei commit di un solo utente?


Risposte:


1715

Funziona con entrambi git loge gitk- i 2 modi più comuni di visualizzare la cronologia.
Non è necessario utilizzare l'intero nome:

git log --author="Jon"

corrisponderà a un commit fatto da "Jonathan Smith"

git log --author=Jon

e

git log --author=Smith

funzionerebbe anche. Le virgolette sono facoltative se non hai bisogno di spazi.

Aggiungi --allse intendi cercare in tutti i rami e non solo gli antenati del commit corrente nel tuo repository.

Puoi anche abbinare facilmente più autori poiché regex è il meccanismo sottostante per questo filtro. Quindi per elencare i commit di Jonathan o Adam, puoi fare questo:

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

Per escludere i commit di un determinato autore o gruppo di autori che utilizzano espressioni regolari come indicato in questa domanda , è possibile utilizzare un lookahead negativo in combinazione con l' --perl-regexpinterruttore:

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

In alternativa, puoi escludere i commit creati da Adam usando bashe piping:

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

Se si desidera escludere i commit commessi (ma non necessariamente creati) da Adam, sostituire %ancon %cn. Maggiori dettagli su questo sono nel mio post sul blog qui: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/


9
C'è un modo per fare il contrario? Di ': voglio vedere tutti gli impegni tranne quello di Jon.
Ian Robinson,

4
@Ian per quanto riguarda git help log "Jon" è un'espressione regolare, quindi dovrebbe essere abbastanza semplice
sumek,

2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk

4
Qualche modo per gitklasciare fuori il genitore si impegna da altri autori? (Sono mostrati con cerchi bianchi.) Al contrario, git log --graphnon mostra il commit dei genitori; mostra solo i commit dell'autore dato. Mi piacerebbe vedere lo stesso output in gitk. (Già selezionato Preferenze e Modifica vista - impossibile trovare nulla di utile.)
ADTC

2
Attenzione, questo
distingue tra


44

Su github c'è anche un modo segreto ...

È possibile filtrare i commit per autore nella vista commit aggiungendo il parametro ?author=github_handle. Ad esempio, il link https://github.com/dynjs/dynjs/commits/master?author=jingweno mostra un elenco di commit al progetto Dynjs


1
un modo per vedere attraverso i rami? qualcosa come commit / tutti?
concordato il

Come hai trovato questo? Quali altri flag sono supportati?
Woodrow Barlow,

1
La risposta di pro.mean come fare questo tramite l'interfaccia: stackoverflow.com/a/39123694/1225617
Adam Millerchip

Non preferisco questa risposta perché la domanda era correlata a un software e non a un servizio specifico.
Valerio Bozz,

Domanda era solo come visualizzare il registro git - indipendentemente dalla tecnologia. Quindi questa risposta si adatta perfettamente al conto.
Slott

31
git help log

ti dà la manpage di git log. Cerca "autore" lì premendo / e quindi digitando "autore", seguito da Invio. Digita "n" alcune volte per accedere alla sezione pertinente, che rivela:

git log --author="username"

come già suggerito.

Nota che questo ti darà l'autore dei commit, ma in Git, l'autore può essere qualcuno diverso dal committer (ad esempio nel kernel Linux, se invii una patch come un normale utente, potrebbe essere impegnata da un altro utente amministrativo .) Vedi la differenza tra autore e committer in Git? per ulteriori dettagli)

Il più delle volte, ciò a cui uno si riferisce come utente è sia il committer che l'autore.


21
@James Penso che la tua negatività qui sia ingiustificata. Stavo semplicemente cercando di insegnargli come cercare dalla riga di comando nel caso in cui se ne dimentichi. Penso che mi stai scambiando per una persona che dice solo RTFM, ma ho incluso la risposta nella mia risposta.
ustun

11
Non è negatività. È il fatto che le persone vengono qui per chiedere consigli e molte persone vogliono rispondere con una variante di RTFM. Promette male per la comunità.
James,

11
@James Devo essere d'accordo con ustun qui. Egli ha fatto rispondere alla domanda, e ha offerto una strategia per trovare la risposta che è utile per la ricerca di risposte ad altre domande git-related.
Peter,

4
Non penso sia abbastanza bianco e nero come questo. Sono d'accordo con unstun che dovremmo educare le persone a fare le cose da sole - questa è una buona idea. Laddove unstun è andato leggermente storto, si stanno formando le ipotesi a) Che il PO sappia come cercare una pagina man e, cosa ancora più importante, b) Che il PO sappia cercare "autore". Potrebbero aver cercato "committer" o "nome" o qualcosa del genere.
John Hunt,

6
@JohnHunt hai ragione, non mi era mai venuto in mente di spiegare cosa significhi la ricerca e come viene eseguita al momento. Un po 'l'ho assunto. Correggere leggermente il testo.
ustun

23

Per ottenere maggiori dettagli - (Qui si %anriferisce all'autore)

Usa questo :-

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

E se vuoi il loro indirizzo e-mail usa il formato %aeinvece di %an(che ha dato il nome.)
MarkHu

--authorin realtà cerca per nome dell'autore e non per nome del committer. Vorrei cambiare "username"autore
Algorithmatic

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

Questo dà i tuoi commit in formato testo.


20
Qual è lo scopo di cat |?
Keith Thompson,

3
@KeithThompson Per inseguire un mouse.
nvd,

14

Se vuoi filtrare i tuoi commit:

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

1
Funziona anche senza virgolette e parentesi (almeno su git bash e ubuntu bash).
Lavamantis,

12

Puoi anche abbreviare un po 'questo semplicemente usando una parte del nome utente:

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

11

prova questo strumento https://github.com/kamranahmedse/git-standup

uso

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

Di seguito è la descrizione per ciascuna delle bandiere

- `-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

Dato che l'altra domanda era (forse erroneamente così?) Bloccata, la inserirò qui:

mostra gli autori con i loro conteggi di commit:

git shortlog -nse

trova tutti gli commit per USERNAME specifico:

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

5

Mostra n numero di registri per x utente a colori aggiungendo questo piccolo frammento nel tuo file .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

Per mostrare gli ultimi 10 commit di Frank:

l 10 frank

Per mostrare gli ultimi 20 commit di chiunque:

l 20


4

Se si utilizza GitHub:

  • vai al ramo
  • fai clic su commit

mostrerà l'elenco nel seguente formato

branch_x: < comment> 
author_name committed 2 days ago
  • per vedere l'impegno del singolo autore; fai clic su nome_autore e lì puoi vedere tutti i commit di quell'autore su quel ramo

2
Sono molti clic e presume che sia ospitato repository git. Non risponde alla CLI come molti di quelli sopra hanno fatto.
lacostenycoder

1
@lacostenycoder ma sono informazioni utili, soprattutto perché molti progetti git sono su GitHub!
Adam Millerchip,

2

Puoi usare = = o "spazio". Ad esempio, seguire due comandi restituisce lo stesso

git log --author="Developer1"

git log --author "Developer1"

1

Il mio caso: sto usando l'albero dei sorgenti, ho seguito i seguenti passi:

  1. pressato CRL+3
  2. Autori a discesa modificati
  3. Digitato il nome "Vinod Kumar"

inserisci qui la descrizione dell'immagine


1

Tuttavia, ci sono molte risposte utili. Considerando che, solo per aggiungere un altro modo ad esso. Puoi anche usare

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

Mostrerà l'output in modo raggruppato:

<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

Qui, <Author Name>sotto il ramo corrente vengono eseguiti 5 commit . Considerando che, puoi anche usare --allper forzare la ricerca ovunque (tutti i rami) nel repository git.

Unico problema: git tenta internamente di abbinare un input <author name>con il nome e l'e-mail dell'autore nel database git. Fa distinzione tra maiuscole e minuscole .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.