Cómo inspeccionar el historial de un proyecto con Git Log

Uno de los servicios más fundamentales proporcionados por Git es el historial del proyecto. Dado que Git realiza un seguimiento de todos los cambios en los archivos realizados dentro de un repositorio, puede ofrecer funciones de registro muy potentes. Puede consultar el historial de un proyecto de muchas formas diferentes y puede extraer y mostrar varios datos utilizando un comando flexible.

El comando git log es enorme, el más grande de cualquier comando Git normal. Su manual tiene más de 2500 líneas. Afortunadamente, git log proporciona gran parte de su comportamiento más útil a partir de unas pocas opciones clave.

Registro básico con el comportamiento predeterminado

De forma predeterminada, git log muestra una lista cronológica inversa de confirmaciones. Cada confirmación incluye su hash, autor, fecha y mensaje de confirmación:

El comando usa un buscapersonas (por ejemplo, menos, más) para mostrar la salida completa para que pueda navegar fácilmente por los resultados. Puede configurar Git para usar un programa de su elección, como el más buscapersonas .

Aquí hay algunos resultados de registro de git del repositorio del código fuente de git en sí:

 commit 670b81a890388c60b7032a4f5b879f2ece8c4558 (HEAD -> master, origin/next,
origin/master, origin/HEAD)
Author: Junio C Hamano <[email protected]>
Date: Mon Jun 14 13:23:28 2021 +0900
The second batch
Signed-off-by: Junio C Hamano <[email protected]>

El resultado comienza con el hash de confirmación ( 670 …) seguido de una lista de ramas que actualmente apuntan a esa confirmación ( HEAD -> master , etc.)

La siguiente línea describe al autor de esta confirmación, dando su nombre y dirección de correo electrónico.

La fecha y hora completas de la confirmación siguen en la siguiente línea.

Finalmente, aparece el contenido completo del mensaje de confirmación. Puede controlar la mayor parte de todo lo demás que ofrece git log con opciones de línea de comandos. Hay dos tipos principales de opciones:

  • Formateo, que define cómo Git muestra cada confirmación.
  • Filtrado, que define qué confirmaciones incluye git log .

Además de las opciones de la línea de comandos, git log acepta argumentos que especifican archivos, confirmaciones, ramas u otros tipos de referencia. Estos aplican un filtrado adicional.

Formateo de la salida del registro de Git

Uno de los ajustes más simples es la opción –oneline que produce un resultado muy breve:

 git log --oneline

Cada línea del registro ahora contiene solo un hash de confirmación abreviado y el asunto del mensaje de confirmación . Esta es una excelente manera de obtener una descripción general de los compromisos recientes con el proyecto:

Desafortunadamente, sin otro contexto, esta información no siempre es tan útil. Puede que le dé una idea vaga del proyecto, pero carece de fechas y otra información útil sobre autores y archivos.

Visualización de un gráfico de rama

La opción –graph le permite visualizar las relaciones entre las ramas. Es muy básico, pero puede ayudar a desenredar una historia complicada.

 git log --oneline --graph

Relacionado: Cómo crear una nueva rama en Git

Salida bonita personalizada

Puede lograr un formato más complicado si lo especifica en detalle con la opción –pretty . La sintaxis va de muy simple a mucho más compleja, así que consulte un manual para obtener detalles completos .

 git log --pretty=short

Es esencialmente lo mismo que git log sin la fecha o el mensaje completo:

 git log --pretty=oneline

Es equivalente a git log –oneline .

 git log --pretty=fuller

Incluye muchos detalles. Incluso separa al autor y al autor que, en teoría, pueden ser personas diferentes:

Con el formato: variant, puede proporcionar una cadena que contenga el contenido que desee, incluidos los marcadores de posición que se reemplazan por varios datos. A continuación, se muestran algunos ejemplos de marcadores de posición:

  • % H cometer hash
  • % h hash de confirmación abreviado
  • % fecha del autor del anuncio
  • % ar fecha del autor, relativo
  • % s asunto del mensaje de confirmación
  • % b confirmar el cuerpo del mensaje
  • % p hashes primarios abreviados

Puede agregar caracteres fijos a la salida y colorearla. Este ejemplo también muestra una variación en el formato de fecha:

 git log --pretty=format:'%C(auto) %h [%ad] %s' --date=short

Tenga en cuenta que los corchetes rodean la fecha. Independientemente del formato que elija, si desea que la salida sea útil en una canalización o para otras formas de procesamiento de texto, debe considerar cómo demarcar cada parte de la salida.

Mostrar diferencias en el registro

Un detalle importante al mirar el historial de un repositorio son las diferencias en sí mismas. ¡Representan lo que realmente ha cambiado en el código, después de todo! Para empezar, puede obtener un resumen de los cambios junto con cada confirmación usando –shortstat :

 git log --shortstat

Esto agrega una línea como:

 1 file changed, 48 insertions(+), 2 deletions(-)

Al final de cada confirmación. A menudo verá este tipo de resumen, a lo largo de las páginas de GitHub, por ejemplo, y es una forma útil de juzgar rápidamente el alcance de una confirmación específica. Para obtener información más detallada, puede incluir la salida completa del parche (diffs) usando la marca -p :

 git log -p

Filtrar la salida del registro de Git

Independientemente del formato que aplique, seguirá viendo el registro completo de todas las confirmaciones en la rama actual. A pesar de que Git los divide en páginas, todavía puede ser una gran cantidad de resultados. Las siguientes opciones le permiten personalizar qué confirmaciones incluye el registro.

Restringir por cantidad

Si solo desea recortar los resultados para mostrar las pocas confirmaciones más recientes, use la sintaxis – [número] :

 git log -2

Restringir por fecha

Para restringir el conjunto de confirmaciones a un determinado intervalo de fechas, utilice el –ya opciones (–after) y –until (–Antes). Cada uno de ellos tiene una fecha en formato ISO 8601. Puede usar –desde o –hasta por sí solos, o ambos juntos para especificar un rango. Las opciones –after y –Antes son sinónimos.

 git log --since="2021-01-01" --until="2021-05-01"

Restricción por archivo

El registro de Git puede centrarse en un archivo específico en lugar de en todos los archivos de su repositorio. Esto es excelente para ayudarlo a descubrir cómo ha cambiado un archivo en particular con el tiempo. Simplemente agregue el nombre del archivo al final de su comando git:

 git log filename

Verá solo las confirmaciones que afectaron al nombre de archivo .

Diferencias entre ramas

Es posible que tenga algunos requisitos únicos al ver el registro de una rama. Por ejemplo, en lugar de ver el historial completo, es posible que desee ver qué ha cambiado en esa rama específica. Git log puede ayudar a través de la sintaxis ref1..ref2 . Hay tres enfoques ligeramente diferentes que puede utilizar:

  1. Ver confirmaciones que están en la rama principal, pero no en la rama:
     git log --oneline origin/branch..origin/main
  2. Ver confirmaciones que están en la rama, pero no en la principal:
     git log --oneline origin/ main ..origin/ branch
  3. Ver confirmaciones que existen solo en la rama o principal:
     git log --oneline origin/branch ... origin/main

Diferencias entre dos etiquetas

Así como puede ver el historial entre ramas usando la sintaxis ref1..ref2 , también puede ver el historial entre etiquetas de la misma manera. Después de todo, tanto las etiquetas como las ramas son tipos de referencia.

 git log --abbrev-commit --pretty=format:'%h %ar %s' v2.32.0-rc3..v2.32.0

Si está preparando notas de la versión para un proyecto más grande, git shortlog debería ser su primer puerto de escala. Produce una lista de autores con temas de compromiso junto a ellos. Puede pasarle un rango de referencia para limitar el historial de una manera similar a git log:

 git shortlog v2.32.0-rc3..v2.32.0

El comando git show es incluso más versátil que git log . Puede funcionar con etiquetas y otros tipos de objetos git más allá del historial de confirmaciones. Comparte muchas opciones con git log , pero solo lo necesitará si necesita profundizar en detalles de nivel inferior.

Revise el pasado con Git Log

Git log es un comando complicado, pero puede aprovechar sus opciones más básicas. Examinar el historial de un repositorio es una excelente manera de comprender la frecuencia con la que ocurren los cambios y cuántas personas los realizan. Una vez que tenga una buena comprensión de la historia de un proyecto, estará en una excelente posición para contribuir usted mismo.