¿Cómo puedo ver un registro git de las confirmaciones de un solo usuario?


Respuestas:


1715

Esto funciona para ambos git logy gitk- las 2 formas más comunes de ver el historial.
No necesita usar el nombre completo:

git log --author="Jon"

coincidirá con un compromiso realizado por "Jonathan Smith"

git log --author=Jon

y

git log --author=Smith

También funcionaría. Las comillas son opcionales si no necesita espacios.

Agregue --allsi tiene la intención de buscar todas las ramas y no solo los antepasados ​​del commit actual en su repositorio.

También puede coincidir fácilmente en varios autores, ya que la expresión regular es el mecanismo subyacente para este filtro. Entonces, para enumerar las confirmaciones de Jonathan o Adam, puede hacer esto:

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

Para excluir las confirmaciones de un autor en particular o un conjunto de autores que usan expresiones regulares como se señala en esta pregunta , puede usar una búsqueda anticipada negativa en combinación con el --perl-regexpinterruptor:

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

Alternativamente, puede excluir confirmaciones creadas por Adam usando bashy canalizando:

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

Si desea excluir los compromisos cometidos (pero no necesariamente creados) por Adam, reemplace %ancon %cn. Más detalles sobre esto están en mi blog aquí: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/


99
¿Hay alguna manera de hacer lo contrario? Diga: quiero ver todos los commits excepto Jon's.
Ian Robinson el

44
@Ian como para git log ayuda "Jon" es una expresión regular por lo que debería ser bastante fácil
sumek

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

44
¿Alguna forma de gitkdejar de lado los compromisos de los padres de otros autores? (Se muestran con círculos blancos). En contraste, git log --graphno muestra los compromisos del padre; solo muestra los compromisos del autor dado. Me encantaría ver la misma salida en gitk. (Ya verifiqué Preferencias y Vista de edición, no pude encontrar nada útil)
ADTC

2
Tenga en cuenta que esto
distingue entre


44

En github también hay un camino secreto ...

Puede filtrar confirmaciones por autor en la vista de confirmación agregando parámetros ?author=github_handle. Por ejemplo, el enlace https://github.com/dynjs/dynjs/commits/master?author=jingweno muestra una lista de confirmaciones para el proyecto Dynjs


1
alguna forma de ver a través de las ramas? algo como commits / all?
whizcreed

¿Cómo encontraste esto? ¿Qué otras banderas son compatibles?
Woodrow Barlow

1
respuesta de pro.mean cómo hacer esto a través de la interfaz: stackoverflow.com/a/39123694/1225617
Adam Millerchip

No prefiero esta respuesta porque la pregunta estaba relacionada con un software y no con un servicio específico.
Valerio Bozz

Pregunta era simplemente cómo ver el registro de git - independientemente de la tecnología. Entonces esta respuesta se ajusta perfectamente.
slott

31
git help log

le da la página de manual de git log. Busque "author" allí presionando / y luego escribiendo "author", seguido de Enter. Escriba "n" varias veces para llegar a la sección correspondiente, que revela:

git log --author="username"

como ya se sugirió.

Tenga en cuenta que esto le dará el autor de los commits, pero en Git, el autor puede ser alguien diferente del committer (por ejemplo, en el kernel de Linux, si envía un parche como usuario ordinario, podría ser cometido por otro usuario administrativo .) ¿Ves la diferencia entre autor y committer en Git? para más detalles)

Sin embargo, la mayoría de las veces, a lo que uno se refiere como el usuario es tanto el que confirma como el autor.


21
@ James Creo que tu negatividad aquí es injustificada. Simplemente estaba tratando de enseñarle cómo buscarlo desde la línea de comandos en caso de que se olvide. Creo que me estás confundiendo con una persona que solo dice RTFM, pero incluí la respuesta en mi respuesta.
Ustun

11
No es negatividad. Es el hecho de que la gente viene aquí pidiendo consejo, y mucha gente quiere responder con alguna variante de RTFM. Un mal augurio para la comunidad.
James

11
@ James Tengo que estar de acuerdo con nosotros aquí. Él hizo responder a la pregunta, y ofreció una estrategia para encontrar la respuesta que es útil para la búsqueda de respuestas a otras preguntas relacionadas con git.
Peter

44
No creo que sea tan blanco y negro como esto. Ahora, estoy de acuerdo con unstun en que debemos educar a las personas sobre cómo hacer las cosas por sí mismas, es una buena idea. Donde unstun salió un poco mal fue hacer las suposiciones a) Que el OP sabe cómo buscar una página de manual, y lo más importante b) Que el OP sabe buscar 'autor'. Es posible que hayan buscado 'committer' o 'name' o algo así.
John Hunt

66
@JohnHunt tienes razón, nunca se me ocurrió explicar qué significa la búsqueda y cómo se hace en ese momento. Algo así lo asumí. Arreglando el texto ligeramente.
Ustun

23

Para obtener más detalles - (Aquí se %anrefiere al autor)

Utilizar este :-

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

Y si desea el formato de uso de su dirección de correo electrónico en %aelugar de %an(que dio nombre)
MarkHu

--authoren realidad busca por el nombre del autor y no por el nombre del confirmador. Me gustaría cambiar "username"a autor
Algorithmatic

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

Esto le da a sus confirmaciones en formato de texto.


20
¿Cuál es el propósito de la cat |?
Keith Thompson

3
@KeithThompson Para perseguir un mouse.
nvd

14

Si quieres filtrar tus propios commits:

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

1
También funciona sin las comillas y los corchetes (al menos en git bash y ubuntu bash).
Lavamantis

12

Incluso puede abreviar esto un poco simplemente usando parte del nombre de usuario:

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

11

prueba esta herramienta 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]
```

A continuación se muestra la descripción de cada una de las banderas.

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

Dado que la otra pregunta fue bloqueada (¿posiblemente erróneamente?), Simplemente pondré esto aquí:

mostrar autores con sus recuentos de compromiso:

git shortlog -nse

encuentre todos los commits para USERNAME específico:

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

5

Muestre un número n de registros para x usuarios en color agregando este pequeño fragmento en su archivo .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

Para mostrar los últimos 10 commits de Frank:

l 10 frank

Para mostrar los últimos 20 compromisos de cualquier persona:

l 20


4

Si usa GitHub:

  • ir a la sucursal
  • haga clic en confirmaciones

mostrará la lista en el siguiente formato

branch_x: < comment> 
author_name committed 2 days ago
  • para ver el compromiso del autor individual; haga clic en author_name y allí podrá ver todas las confirmaciones de ese autor en esa rama

2
Eso es un montón de clics y asume el repositorio de git alojado. No responde CLI como lo han hecho muchos anteriores.
lacostenycoder

1
@lacostenycoder pero es información útil, ¡especialmente porque hay tantos proyectos de git en GitHub!
Adam Millerchip

2

Puede usar ya sea = o "espacio". Por ejemplo, seguir dos comandos devuelve lo mismo

git log --author="Developer1"

git log --author "Developer1"

1

Mi caso: estoy usando el árbol de origen, seguí los siguientes pasos:

  1. Presionado CRL+3
  2. Se cambiaron los autores desplegables
  3. Escribí el nombre "Vinod Kumar"

ingrese la descripción de la imagen aquí


1

Aunque, hay muchas respuestas útiles. Mientras que, solo para agregar otra forma de hacerlo. También puedes usar

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

Mostrará la salida de la manera agrupada:

<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

Aquí, se realizan un total de 5 confirmaciones por <Author Name>debajo de la rama actual. Mientras que, también puede usar --allpara forzar la búsqueda en todas partes (todas las ramas) en el repositorio de git.

Una trampa: git trata internamente de hacer coincidir una entrada <author name>con el nombre y el correo electrónico del autor en la base de datos de git. Es sensible a mayúsculas y minúsculas .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.