Wie kann ich ein Git-Protokoll mit nur den Commits eines Benutzers anzeigen?

1258

Bei der Verwendung git log, wie kann ich durch den Benutzer filtern , so dass ich nur von diesem Nutzer verpflichtet sehen?

Markdorison
quelle
4
Gibt es eine Möglichkeit, dasselbe direkt zu sehen github?
Vadorequest
1
Um dies auf Github zu tun: stackoverflow.com/a/23515164/26510
Brad Parks

Antworten:

1715

Dies funktioniert für beide git logund gitk- die zwei am häufigsten verwendeten Möglichkeiten der Geschichte sehen.
Sie müssen nicht den ganzen Namen verwenden:

git log --author="Jon"

wird einem Commit von "Jonathan Smith" entsprechen

git log --author=Jon

und

git log --author=Smith

würde auch funktionieren. Die Anführungszeichen sind optional, wenn Sie keine Leerzeichen benötigen.

Fügen --allSie hinzu, wenn Sie alle Zweige durchsuchen möchten und nicht nur die Vorfahren des aktuellen Commits in Ihrem Repo.

Sie können auch problemlos mehrere Autoren abgleichen, da Regex der zugrunde liegende Mechanismus für diesen Filter ist. Um Commits von Jonathan oder Adam aufzulisten, können Sie Folgendes tun:

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

Um Commits eines bestimmten Autors oder einer Gruppe von Autoren mit regulären Ausdrücken auszuschließen, wie in dieser Frage angegeben , können Sie in Kombination mit dem Schalter einen negativen Lookahead verwenden--perl-regexp :

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

Alternativ können Sie von Adam erstellte Commits mit bashund piping ausschließen:

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

Wenn Sie von Adam festgeschriebene (aber nicht unbedingt verfasste) Commits ausschließen möchten, ersetzen Sie diese %andurch %cn. Weitere Details dazu finden Sie in meinem Blog-Beitrag hier: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
quelle
9
Gibt es eine Möglichkeit, das Gegenteil zu tun? Sagen Sie - ich möchte alle Commits außer Jons sehen.
Ian Robinson
4
@ Ian wie für Git Help Log "Jon" ist ein regulärer Ausdruck, so sollte es ziemlich einfach sein
Sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk
4
Gibt es eine Möglichkeit gitk, die Commits der Eltern von anderen Autoren wegzulassen? (Sie werden mit weißen Kreisen angezeigt.) Im Gegensatz dazu werden git log --graphdie übergeordneten Commits nicht angezeigt. Es werden nur die Commits des angegebenen Autors angezeigt. Ich würde gerne die gleiche Ausgabe in sehen gitk. (Bereits überprüfte Einstellungen und Ansicht bearbeiten - konnte nichts Nützliches finden.)
ADTC
2
Beachten Sie, dass dies zwischen Groß- und Kleinschreibung unterscheidet
Chiel ten Brinke
49
git log --author="that user"
wilhelmtell
quelle
44

Auf Github gibt es auch einen geheimen Weg ...

Sie können Commits nach Autor in der Commit-Ansicht filtern, indem Sie param anhängen ?author=github_handle. Der Link https://github.com/dynjs/dynjs/commits/master?author=jingweno zeigt beispielsweise eine Liste der Commits für das Dynjs-Projekt

Slott
quelle
1
eine Möglichkeit, über Zweige hinweg zu sehen? so etwas wie Commits / alles?
Whizcreed
Wie haben Sie das gefunden? Welche anderen Flags werden unterstützt?
Woodrow Barlow
1
pro.means Antwort, wie dies über die Schnittstelle zu tun ist: stackoverflow.com/a/39123694/1225617
Adam Millerchip
Ich bevorzuge diese Antwort nicht, da sich die Frage auf eine Software und nicht auf einen bestimmten Dienst bezog.
Valerio Bozz
Die Frage war nur, wie das Git-Protokoll angezeigt wird - unabhängig von der Technologie. Diese Antwort passt also gut zur Rechnung.
Slott
31
git help log

gibt dir die manpage von git log. Suchen Sie dort nach "author", indem Sie / drücken und dann "author" eingeben, gefolgt von Enter. Geben Sie einige Male "n" ein, um zum entsprechenden Abschnitt zu gelangen, der Folgendes anzeigt:

git log --author="username"

wie schon vorgeschlagen.

Beachten Sie, dass Sie dadurch den Autor der Commits erhalten. In Git kann der Autor jedoch eine andere Person als der Committer sein (z. B. im Linux-Kernel, wenn Sie einen Patch als normaler Benutzer einreichen, wird er möglicherweise von einem anderen Administratorbenutzer festgeschrieben .) Siehe Unterschied zwischen Autor und Committer in Git? für mehr Details)

Meistens ist das, was man als Benutzer bezeichnet, sowohl der Committer als auch der Autor.

ustun
quelle
21
@ James Ich denke, deine Negativität hier ist nicht gerechtfertigt. Ich habe nur versucht, ihm beizubringen, wie man es von der Kommandozeile aus nachschlägt, falls er es vergisst. Ich denke, Sie verwechseln mich mit einer Person, die nur RTFM sagt, aber ich habe die Antwort in meine Antwort aufgenommen.
Ustun
11
Es ist keine Negativität. Es ist die Tatsache, dass Leute hierher kommen und um Rat fragen, und viele Leute wollen mit einer Variante von RTFM antworten. Ein schlechtes Zeichen für die Gemeinschaft.
James
11
@ James Ich muss ustun hier zustimmen. Er hat die Frage beantworten, und er bot die Antwort , eine Strategie für die Suche , die für die Suche nach Antworten auf andere git-Fragen hilfreich.
Peter
4
Ich denke nicht, dass es so schwarz und weiß ist. Jetzt stimme ich unstun zu, dass wir den Menschen beibringen sollten, wie man Dinge für sich selbst macht - das ist eine gute Idee. Wenn unstun etwas schief gelaufen ist, werden die Annahmen getroffen, a) dass das OP weiß, wie man eine Manpage durchsucht, und was noch wichtiger ist, b) dass das OP weiß, wie man nach 'Autor' sucht. Sie haben möglicherweise nach "Committer" oder "Name" oder etwas anderem gesucht.
John Hunt
6
@ JohnHunt Sie haben Recht, es war mir nie in den Sinn gekommen zu erklären, was Suche bedeutet und wie es zu der Zeit gemacht wird. Irgendwie angenommen. Den Text leicht korrigieren.
20.
23

Weitere Details abrufen - (Hier wird %anauf den Autor verwiesen)

Benutze das :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Sireesh Yarlagadda
quelle
Und wenn Sie möchten, dass ihre E-Mail-Adresse das Format %aeanstelle von %an(das den Namen gab) verwendet
MarkHu
--authorsucht tatsächlich nach dem Namen des Autors und nicht nach dem Namen des Committers. Ich würde "username"zum Autor wechseln
Algorithmatic
17
cat | git log --author="authorName" > author_commits_details.txt

Dies gibt Ihre Commits im Textformat.

Johnsa Philip
quelle
20
Was ist der Zweck der cat |?
Keith Thompson
1
@KeithThompson Um eine Maus zu jagen.
nvd
14

Wenn Sie Ihre eigenen Commits filtern möchten:

git log --author="<$(git config user.email)>"
Luca Faggianelli
quelle
1
Es funktioniert auch ohne Anführungszeichen und Klammern (zumindest bei Git Bash und Ubuntu Bash).
Lavamantis
12

Sie können dies sogar ein wenig abkürzen, indem Sie einfach einen Teil des Benutzernamens verwenden:

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

Probieren Sie dieses Tool https://github.com/kamranahmedse/git-standup aus

Verwendungszweck

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

Unten finden Sie die Beschreibung für jedes der Flags

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

Da die andere Frage (möglicherweise zu Unrecht?) Gesperrt war, werde ich dies hier einfügen:

Autoren mit ihren Commit-Zählungen anzeigen:

git shortlog -nse

Hier finden Sie alle Commits für einen bestimmten USERNAME:

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

Zeigen Sie n Anzahl der Protokolle für x Benutzer in Farbe an, indem Sie dieses kleine Snippet in Ihre .bashrc-Datei einfügen.

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

Um die letzten 10 Commits von Frank zu zeigen:

l 10 frank

So zeigen Sie die letzten 20 Commits an:

l 20

Frank Forte
quelle
4

Bei Verwendung von GitHub:

  • Gehe zur Filiale
  • Klicken Sie auf Commits

Die Liste wird im folgenden Format angezeigt

branch_x: < comment> 
author_name committed 2 days ago
  • das Commit des einzelnen Autors zu sehen; Klicken Sie auf author_name und dort sehen Sie alle Commits dieses Autors in diesem Zweig
diEcho
quelle
2
Das sind viele Klicks und setzt gehostetes Git-Repo voraus. Beantwortet CLI nicht so, wie es viele oben getan haben.
Lacostenycoder
1
@lacostenycoder, aber es sind nützliche Informationen, zumal so viele Git-Projekte auf GitHub laufen!
Adam Millerchip
2

Sie können entweder = oder "Leerzeichen" verwenden. Zum Beispiel geben die folgenden zwei Befehle dasselbe zurück

git log --author="Developer1"

git log --author "Developer1"
hardainfo
quelle
1

Mein Fall: Ich verwende den Quellbaum und habe die folgenden Schritte ausgeführt:

  1. Gedrückt CRL+3
  2. Geänderte Dropdown-Autoren
  3. Tippte den Namen "Vinod Kumar"

Geben Sie hier die Bildbeschreibung ein

Vinod Kumar
quelle
1

Es gibt jedoch viele nützliche Antworten. Nur um einen anderen Weg hinzuzufügen. Sie können auch verwenden

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

Die Ausgabe wird gruppiert angezeigt:

<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

Hier werden insgesamt 5 Commits von <Author Name>unter dem aktuellen Zweig ausgeführt. Sie können --alldie Suche auch überall (in allen Zweigen) des Git-Repositorys erzwingen .

Ein Haken: git versucht intern, eine Eingabe <author name>mit dem Namen und der E-Mail-Adresse des Autors in der git-Datenbank abzugleichen. Es wird zwischen Groß- und Kleinschreibung unterschieden .

surajs1n
quelle