Examen de un repositorio

Git Status: inspección de un repositorio

git status

El comando git status muestra el estado del directorio de trabajo y del área del entorno de ensayo. Permite ver los cambios que se han preparado, los que no y los archivos en los que Git no va a realizar el seguimiento. El resultado del estado no muestra ninguna información relativa al historial del proyecto. Para ello, debes usar git log.

Comandos de Git relacionados

  • git tag  
    • Las etiquetas son referencias que indican puntos específicos en el historial de Git. git tag se suele usar para capturar un punto del historial que se usa para la publicación de una versión marcada (p.ej. v1.0.1). 
  • git blame
    • La funcionalidad de alto nivel de git blame es la visualización de los metadatos del autor añadidos las líneas de confirmación específicas en un archivo. Se usa para examinar el historial de código específico y responder a las preguntas sobre qué código se ha añadido al repositorio, cómo se ha añadido y por qué.
  • git log  
    • El comando git log muestra las instantáneas confirmadas. Permite ver el historial del proyecto, filtrarlo y buscar cambios concretos. 

Uso

git status

Enumera los archivos que se han preparado, los que están sin preparar y los archivos sin seguimiento.

Análisis

El comando git status es un comando relativamente sencillo. Muestra lo que ha ocurrido con los comandos git add y git commit. Los mensajes de estado también incluyen información importante para preparar archivos/deshacer su preparación. A continuación, se indica el resultado de ejemplo que muestra las tres categorías principales de una llamada de git status:

# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#modified: hello.py
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#modified: main.py
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#hello.pyc

Ignorar archivos

Los archivos sin seguimiento se suelen dividir en dos categorías. Pueden ser archivos que se acaban de añadir al proyecto y que no se han confirmado aún o binarios compilados como .pyc, .obj, .exe, etc. Mientras que resulta muy conveniente incluir lo primero en el resultado de git status, lo segundo puede limitar las posibilidades de ver lo que ocurre en realidad en tu repositorio.

Por este motivo, Git te permite ignorar completamente los archivos mediante la colocación de las rutas en un archivo especial denominado .gitignore. Los archivos que desees ignorar se deben incluir en una línea aparte y puedes usar el símbolo * como carácter comodín. Por ejemplo, añadir lo siguiente a un archivo .gitignore en la raíz del proyecto evitará que los módulos Python compilados aparezcan en git status:

*.pyc

Ejemplo

Es recomendable comprobar el estado del repositorio antes de confirmar los cambios, para evitar confirmar por error algo que no querías. En este ejemplo se muestra el estado del repositorio antes y después de la preparación y confirmación de una instantánea:

# Edit hello.py
git status
# hello.py is listed under "Changes not staged for commit"
git add hello.py
git status
# hello.py is listed under "Changes to be committed"
git commit
git status
# nothing to commit (working directory clean)

El primer resultado del estado mostrará el archivo sin preparar. La acción git add se reflejará en el segundo git status y el resultado del estado final indicará que no hay nada que confirmar (el directorio de trabajo coincide con la mayoría de las confirmaciones recientes). Algunos comandos de Git (p.ej., git merge) requieren que el directorio de trabajo esté limpio para que no se sobrescriban los cambios sin querer.

git log

El comando git log muestra las instantáneas confirmadas. Permite ver el historial del proyecto, filtrarlo y buscar cambios concretos. Mientras que git status te permite examinar el directorio de trabajo y el área de entorno de ensayo, git log solo actúa en el historial confirmado.

Tutorial de Git: comparación entre git status y git log

La opción "log" se puede personalizar de diversas maneras, desde filtrar las confirmaciones hasta verlas en un formato completamente definido por el usuario. A continuación, presentamos algunas de las opciones de configuración más habituales de git log.

Uso

git log

Este comando muestra el historial de confirmaciones completo con el formato predeterminado. Si el resultado ocupa más de una pantalla, puedes usar Space para desplazarte y q para salir.

git log -n <limit>

Esta opción limita el número de confirmaciones mediante <limit>. Por ejemplo, git log -n 3 mostrará solo 3 confirmaciones.

git log --oneline

Permite agrupar cada confirmación en una sola línea. Resulta útil para obtener información de alto nivel del historial del proyecto.

git log --stat

Junto con la información de git log habitual, se incluye información sobre los archivos que se han modificado y el número relativo de líneas que se han añadido o eliminado en cada uno de ellos.

git log -p

Esta opción muestra el parche que representa cada confirmación. Se muestra la diferencia completa de cada confirmación, que es la vista más detallada que puedes tener del historial del proyecto.

git log --author="<pattern>"

Realiza búsquedas de confirmaciones por un autor concreto. El argumento <pattern> puede ser una cadena sencilla o una expresión regular.

git log --grep="<pattern>"

Realiza búsquedas de confirmaciones con una mensaje de confirmación que coincida con el patrón <pattern>, que puede ser una cadena sencilla o una expresión regular.

git log <since>..<until>

Solo muestra las confirmaciones que se producen entre <since> y <until>. Estos argumentos pueden ser un ID de confirmación, un nombre de rama, HEAD o cualquier otro tipo de referencia de revisión.

git log <file>

Esta opción solo muestra las confirmaciones que incluyen el archivo especificado. Se trata de una forma sencilla de ver el historial de un archivo concreto.

git log --graph --decorate --oneline

A continuación, exponemos algunas opciones que debes tener en cuenta. La marca --graph dibujará un gráfico basado en texto de las confirmaciones de la parte izquierda de los mensajes de confirmación. --decorate añade los nombres de las ramas o las etiquetas de las confirmaciones que se muestran. --oneline muestra la información de confirmación en una única línea para que sea más fácil examinar las confirmaciones de un vistazo.

Análisis

El comando git log es una herramienta básica de Git para explorar el historial del repositorio. este comando se usa cuando necesitas buscar una versión concreta de un proyecto o saber los cambios que se introducirán mediante la fusión en una rama de función.

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith

La mayor parte de esto es bastante sencillo, aunque la primera línea merece alguna explicación. La cadena de 40 caracteres que aparece detrás de commit es una suma de comprobación SHA-1 del contenido de la confirmación. Esto tiene dos finalidades. En primer lugar, garantiza la integridad de la confirmación (en caso de que se haya dañado en algún momento, la confirmación generaría una suma de comprobación distinta) En segundo lugar, se utiliza como ID único para la confirmación.

Este ID se puede usar en comandos como git log <since>..<until> para hacer referencia a confirmaciones específicas. Por ejemplo, git log 3157e..5ab91 mostrará todo el contenido entre las confirmaciones con ID 3157e y 5ab91. Además de las sumas de comprobación, los nombres de ramas (que se tratan en el módulo sobre ramas) y la palabra clave HEAD son otros métodos habituales para referirnos a las confirmaciones individuales. HEAD siempre hace referencia a la confirmación actual, ya sea una rama o una confirmación específica.

El carácter ~ resulta útil para crear referencias relativas a la entidad principal de una confirmación. Por ejemplo, 3157e~1 hace referencia a la confirmación anterior a 3157e y HEAD~3 es la entidad primaria principal superior de la confirmación actual.

La idea que subyace en todos estos métodos de identificación es que puedas realizar acciones basándote en confirmaciones específicas. El comando git log suele ser el punto inicial de estas interacciones, ya que te permite buscar las confirmaciones con las que quieres trabajar.

Ejemplo

En la sección Uso se ofrecen numerosos ejemplos de git log, pero ten en cuenta que se pueden combinar varias opciones en un comando:

git log --author="John Smith" -p hello.py

En este ejemplo, se mostrará una diferencia completa de todos los cambios que John Smith ha realizado en el archivo hello.py.

La sintaxis .. es una herramienta muy útil para comparar ramas. En el siguiente ejemplo, se muestra una breve descripción de todas las confirmaciones presentes en some-feature que no están presentes en master.

git log --oneline master..some-feature

¿Listo para aprender a usar git status?

Prueba este tutorial interactivo.

Comienza ahora