Comment puis-je afficher un journal git des validations d'un seul utilisateur?

1258

Lors de l'utilisation git log, comment puis-je filtrer par utilisateur afin de ne voir que les validations de cet utilisateur?

markdorison
la source
4
Existe-t-il un moyen de voir la même chose directement sur github?
Vadorequest
1
Pour ce faire sur github: stackoverflow.com/a/23515164/26510
Brad Parks

Réponses:

1715

Cela fonctionne pour les deux git loget gitk- les 2 façons les plus courantes de visualiser l'historique.
Vous n'avez pas besoin d'utiliser le nom complet:

git log --author="Jon"

correspondra à un commit de "Jonathan Smith"

git log --author=Jon

et

git log --author=Smith

fonctionnerait également. Les guillemets sont facultatifs si vous n'avez besoin d'aucun espace.

Ajoutez --allsi vous avez l'intention de rechercher toutes les branches et pas seulement les ancêtres du commit actuel dans votre référentiel.

Vous pouvez également facilement faire correspondre plusieurs auteurs, car l'expression régulière est le mécanisme sous-jacent de ce filtre. Donc, pour lister les commits de Jonathan ou Adam, vous pouvez faire ceci:

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

Afin d'exclure les validations d'un auteur ou d'un ensemble d'auteurs particulier à l'aide d'expressions régulières comme indiqué dans cette question , vous pouvez utiliser une anticipation négative en combinaison avec le --perl-regexpcommutateur:

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

Vous pouvez également exclure les validations créées par Adam en utilisant bashet en canalisant:

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

Si vous souhaitez exclure les validations validées (mais pas nécessairement créées) par Adam, remplacez %anpar %cn. Plus de détails à ce sujet sont dans mon article de blog ici: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
la source
9
Existe-t-il un moyen de faire le contraire? Dites - je veux voir tous les commits sauf ceux de Jon.
Ian Robinson
4
@Ian comme pour git help log "Jon" est une expression régulière donc ça devrait être assez facile
sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk
4
Y a-t-il un moyen de faire gitkabstraction des engagements des parents d'autres auteurs? (Ils sont représentés avec des cercles blancs.) En revanche, git log --graphne montre pas les validations des parents; il montre seulement les commits de l'auteur donné. J'aimerais voir la même sortie en gitk. (Préférences et vue d'édition déjà vérifiées - rien trouvé d'utile.)
ADTC
2
Attention, la casse est sensible
Chiel ten Brinke
49
git log --author="that user"
wilhelmtell
la source
44

Sur github il y a aussi une voie secrète ...

Vous pouvez filtrer les validations par auteur dans la vue de validation en ajoutant param ?author=github_handle. Par exemple, le lien https://github.com/dynjs/dynjs/commits/master?author=jingweno affiche une liste des validations du projet Dynjs

slott
la source
1
une façon de voir à travers les branches? quelque chose comme commits / all?
whizcreed
Comment avez-vous trouvé cela? Quels autres indicateurs sont pris en charge?
Woodrow Barlow
1
Réponse de pro.mean comment faire cela via l'interface: stackoverflow.com/a/39123694/1225617
Adam Millerchip
Je ne préfère pas cette réponse car la question était liée à un logiciel et non à un service spécifique.
Valerio Bozz
La question était simplement de savoir comment afficher le journal git - quelle que soit la technologie. Cette réponse correspond donc très bien au projet de loi.
slott
31
git help log

vous donne la page de manuel de git log. Recherchez «auteur» à cet endroit en appuyant sur / puis en tapant «auteur», puis sur Entrée. Tapez "n" plusieurs fois pour accéder à la section appropriée, qui révèle:

git log --author="username"

comme déjà suggéré.

Notez que cela vous donnera l'auteur des commits, mais dans Git, l'auteur peut être quelqu'un de différent du committer (par exemple dans le noyau Linux, si vous soumettez un patch en tant qu'utilisateur ordinaire, il peut être validé par un autre utilisateur administratif .) Voir Différence entre auteur et committer dans Git? pour plus de détails)

La plupart du temps, ce que l'on appelle l'utilisateur est à la fois l'auteur et l'auteur.

ustun
la source
21
@James Je pense que votre négativité ici est injustifiée. J'essayais simplement de lui apprendre à le rechercher à partir de la ligne de commande au cas où il oublierait. Je pense que vous me confondez avec une personne qui vient de dire RTFM, mais j'ai inclus la réponse dans ma réponse.
ustun
11
Ce n'est pas de la négativité. C'est le fait que les gens viennent ici pour demander des conseils, et beaucoup de gens veulent répondre avec une variante de RTFM. De mauvais augure pour la communauté.
James
11
@James, je dois être d'accord avec ustun ici. Il a répondu à la question et il a proposé une stratégie pour trouver la réponse qui est utile pour trouver des réponses à d'autres questions liées à Git.
Peter
4
Je ne pense pas que ce soit aussi noir et blanc que ça. Maintenant, je suis d'accord avec unstun que nous devons éduquer les gens à faire les choses par eux-mêmes - c'est une bonne idée. Là où un étourdissement a légèrement mal tourné, c'est en faisant les hypothèses a) Que l'OP sait comment rechercher une page de manuel, et plus important encore b) Que l'OP sait rechercher 'auteur'. Ils peuvent avoir recherché «committer» ou «name» ou quelque chose.
John Hunt
6
@JohnHunt vous avez raison, il ne m'est jamais venu à l'esprit d'expliquer ce que signifie la recherche et comment elle est effectuée à l'époque. En quelque sorte assumé. Fixer légèrement le texte.
ustun
23

Pour tirer plus de détails - (ici se %anréfère à l'auteur)

Utilisez ceci :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Sireesh Yarlagadda
la source
Et si vous voulez que leur adresse e-mail utilise le format %aeau lieu de %an(qui a donné le nom.)
MarkHu
--authorrecherche en fait par le nom de l'auteur et non par le nom du committer. Je changerais "username"d'auteur
Algorithmatic
17
cat | git log --author="authorName" > author_commits_details.txt

Cela donne vos commits au format texte.

Johnsa Philip
la source
20
Quel est le but du cat |?
Keith Thompson
3
@KeithThompson Pour chasser une souris.
nvd
14

Si vous souhaitez filtrer vos propres validations:

git log --author="<$(git config user.email)>"
Luca Faggianelli
la source
1
Il fonctionne également sans les guillemets et les parenthèses (au moins sur git bash et ubuntu bash).
Lavamantis
12

Vous pouvez même abréger cela un peu en utilisant simplement une partie du nom d'utilisateur:

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

essayez cet outil https://github.com/kamranahmedse/git-standup

Usage

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

Voici la description de chacun des drapeaux

- `-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
la source
6

Étant donné que l'autre question a été (peut-être à tort?) Verrouillée, je vais simplement la mettre ici:

montrer aux auteurs leur nombre de validations:

git shortlog -nse

trouver tous les commits pour USERNAME spécifique:

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

Affichez un nombre n de journaux pour x utilisateur en couleur en ajoutant ce petit extrait dans votre fichier .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

Pour afficher les 10 derniers commits de Frank:

l 10 frank

Pour afficher les 20 derniers commits de n'importe qui:

l 20

Frank Forte
la source
4

Si vous utilisez GitHub:

  • aller à la succursale
  • cliquez sur commits

il affichera la liste dans le format ci-dessous

branch_x: < comment> 
author_name committed 2 days ago
  • voir l'engagement de chaque auteur; cliquez sur author_name et là vous pouvez voir tous les commit de cet auteur sur cette branche
diEcho
la source
2
Cela représente beaucoup de clics et suppose un dépôt git hébergé. Ne répond pas à CLI comme beaucoup l'ont fait ci-dessus.
lacostenycoder
1
@lacostenycoder mais ce sont des informations utiles, d'autant plus que tant de projets git sont sur GitHub!
Adam Millerchip
2

Vous pouvez utiliser soit = ​​soit "espace". Par exemple, le fait de suivre deux commandes renvoie le même

git log --author="Developer1"

git log --author "Developer1"
harshainfo
la source
1

Mon cas: j'utilise l'arbre source, j'ai suivi les étapes suivantes:

  1. Pressé CRL+3
  2. Auteurs déroulants modifiés
  3. A tapé le nom "Vinod Kumar"

entrez la description de l'image ici

Vinod Kumar
la source
1

Cependant, il existe de nombreuses réponses utiles. Alors, juste pour y ajouter une autre façon. Vous pouvez aussi utiliser

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

Il affichera la sortie de la manière groupée:

<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

Ici, 5 commits au total sont effectués par <Author Name>la branche actuelle. Considérant que, vous pouvez également utiliser --allpour appliquer la recherche partout (toutes les branches) dans le référentiel git.

Un hic: git essaie en interne de faire correspondre une entrée <author name>avec le nom et l'e-mail de l'auteur dans la base de données git. Il est sensible à la casse .

surajs1n
la source