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


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/


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ść


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


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.


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"

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.


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)>"

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

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

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

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


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

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"

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


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.