Jak mogę wyświetlić dziennik git zawierający tylko zatwierdzenia jednego użytkownika?

1255

W git logjaki sposób mogę filtrować według użytkownika, aby wyświetlać tylko zatwierdzenia od tego użytkownika?

markdorison
źródło
4
Czy istnieje sposób, aby zobaczyć to samo bezpośrednio na github?
Vadorequest
1
Aby to zrobić na github: stackoverflow.com/a/23515164/26510
Brad Parks

Odpowiedzi:

1713

Działa to zarówno dla - jak git logi gitk2 najczęstszych sposobów przeglądania historii.
Nie musisz używać całej nazwy:

git log --author="Jon"

będzie pasować do zatwierdzenia dokonanego przez „Jonathana Smitha”

git log --author=Jon

i

git log --author=Smith

też by działał. Cytaty są opcjonalne, jeśli nie potrzebujesz spacji.

Dodaj, --alljeśli zamierzasz przeszukać wszystkie gałęzie, a nie tylko przodków bieżącego zatwierdzenia w repozytorium.

Możesz także łatwo dopasować wielu autorów, ponieważ wyrażenie regularne jest podstawowym mechanizmem tego filtra. Aby wyświetlić listę zatwierdzeń Jonathana lub Adama, możesz to zrobić:

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

Aby wykluczyć zatwierdzenia określonego autora lub zbioru autorów używających wyrażeń regularnych, jak wspomniano w tym pytaniu , możesz użyć negatywnego efektu w połączeniu z --perl-regexpprzełącznikiem:

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

Alternatywnie możesz wykluczyć zatwierdzenia autorstwa Adama, używając bashi potokując:

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

Jeśli chcesz wykluczyć zobowiązuje zaangażowani (ale niekoniecznie autorami), których autorem jest Adam, wymienić %anz %cn. Więcej informacji na ten temat znajduje się w moim blogu tutaj: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
źródło
9
Czy istnieje sposób, aby zrobić coś przeciwnego? Powiedz - chcę zobaczyć wszystkie zatwierdzenia oprócz Jona.
Ian Robinson
4
@ Ian jak dla git help log „Jon” jest wyrażeniem regularnym, więc powinno być całkiem łatwe
sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk
4
Czy istnieje jakiś sposób, aby gitkpominąć zobowiązania rodziców od innych autorów? (Są pokazane z białymi kółkami.) Natomiast git log --graphnie pokazuje, że rodzic zatwierdza; pokazuje tylko zobowiązania autora. Chciałbym zobaczyć ten sam wynik w gitk. (Już sprawdziłem Preferencje i Edytuj widok - nic nie znalazłem.)
ADTC
2
Uwaga, w tym rozróżniana jest
wielkość
49
git log --author="that user"
wilhelmtell
źródło
44

Na github istnieje również sekretny sposób ...

Możesz filtrować zatwierdzenia według autora w widoku zatwierdzenia, dołączając parametr ?author=github_handle. Na przykład link https://github.com/dynjs/dynjs/commits/master?author=jingweno pokazuje listę zatwierdzeń do projektu Dynjs

slott
źródło
1
jakikolwiek sposób, aby zobaczyć między oddziałami? coś jak commits / all?
gwizdał
Jak to znalazłeś? Jakie inne flagi są obsługiwane?
Woodrow Barlow,
1
Odpowiedź pro.mean, jak to zrobić za pomocą interfejsu: stackoverflow.com/a/39123694/1225617
Adam Millerchip,
Nie wolę tej odpowiedzi, ponieważ pytanie dotyczyło oprogramowania, a nie konkretnej usługi.
Valerio Bozz
Pytanie tylko, jak wyświetlić dziennik git - niezależnie od technologii. Ta odpowiedź pasuje więc do rachunku.
slott
31
git help log

daje ci stronę podręcznika git log. Wyszukaj „autora”, naciskając /, a następnie wpisując „autor”, a następnie Enter. Wpisz kilka razy „n”, aby przejść do odpowiedniej sekcji, która pokazuje:

git log --author="username"

jak już sugerowano.

Zauważ, że da ci to autora zatwierdzeń, ale w Git autorem może być ktoś inny niż osoba zatwierdzająca (na przykład w jądrze Linuksa, jeśli prześlesz łatkę jako zwykły użytkownik, może zostać popełniony przez innego użytkownika administracyjnego .) Zobacz Różnica między autorem a autorem w Git? po więcej szczegółów)

Przez większość czasu to, co określa się mianem użytkownika, jest zarówno autor, jak i autor.

ustun
źródło
21
@James Myślę, że twoje negatywne opinie tutaj są nieuzasadnione. Po prostu starałem się nauczyć go, jak patrzeć na to z linii poleceń, na wypadek gdyby zapomniał. Myślę, że mylicie mnie z osobą, która po prostu mówi RTFM, ale uwzględniłem odpowiedź w mojej odpowiedzi.
ustun
11
To nie jest negatywność. Faktem jest, że ludzie przychodzą tutaj z prośbą o radę, a wielu ludzi chce odpowiedzieć jakimś wariantem RTFM. Źle wróży społeczności.
James
11
@James Muszę się zgodzić z ustun tutaj. On sam odpowiedzieć na to pytanie, a on zaproponował strategię na znalezienie odpowiedzi, które jest pomocne w znajdowaniu odpowiedzi na inne pytania związane z git.
Peter
4
Nie wydaje mi się, żeby było tak czarno-białe jak to. Teraz zgadzam się ze unstunem, że powinniśmy edukować ludzi, jak robić rzeczy dla siebie - to dobry pomysł. To, gdzie unstun poszło nieco źle, opiera się na założeniach: a) że PO wie, jak przeszukać stronę podręcznika, a co ważniejsze b) że PO wie, że szuka „autora”. Być może szukali słowa „osoba przekazująca”, „nazwa” lub coś w tym rodzaju.
John Hunt
6
@JohnHunt masz rację, nigdy nie przyszło mi do głowy, aby wyjaśnić, co oznacza wyszukiwanie i jak to się wtedy robi. Coś w tym rodzaju. Lekko naprawiając tekst.
ustun
23

Aby wyciągnąć więcej szczegółów - (tutaj %anodnosi się do autora)

Użyj tego :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Sireesh Yarlagadda
źródło
A jeśli chcesz, aby ich adres e-mail używał formatu %aezamiast %an(który dał nazwę.)
MarkHu 27.04.16
--authorfaktycznie wyszukuje według nazwiska autora, a nie nazwiska osoby odpowiedzialnej. Chciałbym zmienić "username"autorowi
Algorithmatic
17
cat | git log --author="authorName" > author_commits_details.txt

Daje to twoje zobowiązania w formacie tekstowym.

Johnsa Philip
źródło
20
Jaki jest cel tego cat |?
Keith Thompson
1
@KeithThompson Aby gonić mysz.
nvd
14

Jeśli chcesz filtrować własne zatwierdzenia:

git log --author="<$(git config user.email)>"
Luca Faggianelli
źródło
1
Działa również bez cudzysłowów i nawiasów kwadratowych (przynajmniej na git bash i ubuntu bash).
Lavamantis
12

Możesz nawet to trochę skrócić, po prostu używając części nazwy użytkownika:

git log --author=mr  #if you're looking for mrfoobar's commits
trzy
źródło
11

wypróbuj to narzędzie https://github.com/kamranahmedse/git-standup

Stosowanie

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

Poniżej znajduje się opis każdej flagi

- `-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
źródło
6

Ponieważ drugie pytanie było (być może niesłusznie tak?) Zablokowane, po prostu umieszczę to tutaj:

pokaż autorom ich liczbę zatwierdzeń:

git shortlog -nse

znajdź wszystkie zatwierdzenia dla określonej USERNAME:

git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show
sjas
źródło
5

Pokaż n dzienników dla x użytkownika w kolorze, dodając ten mały fragment w pliku .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

Aby wyświetlić 10 ostatnich zatwierdzeń Franka:

l 10 frank

Aby wyświetlić 20 ostatnich zatwierdzeń przez kogokolwiek:

l 20

Frank Forte
źródło
4

Jeśli używasz GitHub:

  • idź do oddziału
  • kliknij zatwierdzenia

wyświetli listę w poniższym formacie

branch_x: < comment> 
author_name committed 2 days ago
  • zobaczyć zatwierdzenie autora; kliknij autor_name i tam zobaczysz wszystkie zatwierdzenia tego autora w tej gałęzi
diEcho
źródło
2
To dużo kliknięć i zakłada hostowane repozytorium git. Nie odpowiada na CLI, jak wiele wcześniej zrobiło.
lacostenycoder,
1
@lacostenycoder, ale jest to użyteczna informacja, zwłaszcza, że ​​wiele projektów git jest na GitHub!
Adam Millerchip,
2

Możesz użyć = lub „spacja”. Na przykład następujące dwa polecenia zwracają to samo

git log --author="Developer1"

git log --author "Developer1"
harshainfo
źródło
1

Mój przypadek: korzystam z drzewa źródłowego, wykonałem następujące kroki:

  1. Prasowany CRL+3
  2. Zmieniono autorów rozwijanych
  3. Wpisał nazwę „Vinod Kumar”

wprowadź opis zdjęcia tutaj

Vinod Kumar
źródło
1

Chociaż istnieje wiele przydatnych odpowiedzi. Natomiast po prostu dodać do tego inny sposób. Możesz także użyć

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

Wyświetli wynik w zgrupowany sposób:

<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

Tutaj <Author Name>w ramach bieżącego oddziału wykonywanych jest łącznie 5 zatwierdzeń . Możesz także użyć --alldo wymuszenia wyszukiwania wszędzie (wszystkie gałęzie) w repozytorium git.

Jeden haczyk: git wewnętrznie próbuje dopasować dane wejściowe <author name>do nazwiska i adresu e-mail autora w bazie danych git. To jest wielkość liter .

surajs1n
źródło