Git Commit: una clase magistral

Publicado: 2023-02-26
Computadora portátil sobre un fondo azul que muestra un símbolo del sistema de Linux.
fatmawati achmad zaenuri/Shutterstock.com
El comando de confirmación de Git almacena copias de los cambios de su directorio de trabajo en su repositorio de Git. Pero también se puede usar para modificar compromisos existentes y también para revertir compromisos.

Un requisito básico de cualquier sistema de control de versiones es almacenar diferentes versiones de archivos para usted. En Git, el comando que hace esto es commit . Aquí está todo lo que necesitas saber.

Tabla de contenido

¿Qué es un compromiso en Git?
Configuración del comando de confirmación
Usando el comando de confirmación
Un compromiso básico
Archivos de almacenamiento automático
Puesta en escena y compromiso al mismo tiempo
Comprometerse con una sucursal diferente
Hacer cambios en las confirmaciones
Eliminación de cambios de una confirmación
Revertir una confirmación completa
La navaja suiza Git

¿Qué es un compromiso en Git?

Los compromisos son la serie de instantáneas realizadas a lo largo del ciclo de vida de un proyecto que conforman su historial de desarrollo. Los compromisos son los que nos permiten extraer una versión del proyecto tal como era en diferentes puntos en el pasado. ¿Por qué es eso importante?

Los sistemas de control de versiones (VCS) se usan más comúnmente con el código fuente del software y los proyectos de desarrollo. Pero se pueden usar con éxito con cualquier colección de archivos de texto, como los archivos Markdown que contienen capítulos de un libro.

Es posible que no desee que el VCS maneje todos los archivos en los directorios de su proyecto, por lo que debe poder designar los archivos cuya versión desea controlar. Esto los agrega a la vista de control de versiones del proyecto. Serán monitoreados por cambios.

Otra forma de lograr esto es usar una lista de ignorados. Esto le dice a Git qué archivos, directorios o tipos de archivos debe ignorar siempre.

Con el tiempo, a medida que se agreguen nuevos archivos al proyecto, será necesario agregar algunos al sistema de control de versiones. En Git, esto se maneja con el comando add . En realidad, el comando add hace un doble servicio, como veremos.

Para mantener un historial de los cambios realizados en el proyecto, periódicamente le pedirá a Git que almacene una instantánea del estado del proyecto mediante el comando commit . Aquí es donde vuelve a aparecer el comando add en nuestro flujo de trabajo. Usamos el comando add para decirle a Git qué archivos modificados queremos incluir en la instantánea. Luego usamos commit para decirle a Git que cree la instantánea.

Configuración del comando de confirmación

La información sobre la confirmación se almacena con él, por lo que siempre es posible saber quién realizó la confirmación, cuándo y qué contiene. Algunos de estos metadatos se capturan en el momento de la confirmación, como el mensaje de confirmación.

Cada usuario puede configurar los metadatos relativos a la identidad de los miembros del equipo de desarrollo, para evitar que proporcione repetidamente la misma información.

Para configurar su nombre globalmente para todos los repositorios en su computadora, use este comando.

 git config --usuario global.nombre "Dave McKay" 

Configuración del nombre de usuario global de Git

Para verificar que se haya configurado su nombre, use este comando.

 git config --usuario global.nombre 

Comprobación del nombre de usuario global de Git

Si necesita usar un nombre diferente en un repositorio en particular, cambie al directorio del proyecto y use el mismo comando sin la opción --global .

 git config nombre de usuario "McKay, David"
 git config usuario.nombre 

Establecer un nombre de usuario de Git específico del repositorio

Ahora tenemos un nombre de usuario predeterminado diferente para este repositorio, y nuestro nombre global todavía se usa para otros repositorios.

De manera similar, podemos establecer una dirección de correo electrónico globalmente o para un solo repositorio al incluir u omitir la opción --global .

 git config usuario.email "[email protected]"
 git config --usuario global.email "[email protected]"
 git config usuario.email
 git config --usuario global.email 

Configuración de direcciones de correo electrónico de usuario predeterminadas de Git globales y específicas del repositorio

Estos ajustes se guardan en archivos de configuración. La configuración global de Git se mantiene en "~/.gitconfig", y la configuración específica del repositorio se mantiene en el archivo ".git/config" del repositorio.

El comando commit hace referencia y usa estos valores mientras opera.

Usando el comando de confirmación

El uso básico del comando commit es tomar los archivos que se encuentran en el área de preparación, conocida como índice, y almacenarlos como una confirmación en la rama actual del repositorio.

Un compromiso básico

Tenemos un proyecto con un archivo modificado. Usaremos el comando add para preparar el archivo y luego confirmarlo. Usamos la opción -m (mensaje de confirmación) para poder proporcionar una breve descripción del propósito de los cambios. Si no usamos esta opción, se nos solicita un mensaje de confirmación cuando se lleva a cabo la confirmación. Es más conveniente agregar uno en la línea de comando.

 git agregar jibber.c
 git commit -m "Texto de ayuda actualizado" 

Organizar y confirmar un solo archivo

Si usamos el comando git log podemos revisar los detalles de las confirmaciones, en orden cronológico, con la confirmación más reciente en la parte superior de la lista.

 registro de git 

Comprobación del registro del repositorio de Git

Las confirmaciones se muestran en less .

La última confirmación en la parte superior del registro de Git

La confirmación se ha etiquetado con el nombre y la dirección de correo electrónico que proporcionamos anteriormente, y nuestro mensaje de confirmación también se registra.

Archivos de almacenamiento automático

La preparación de muchos archivos puede llevar un poco de tiempo. Un enfoque diferente es usar la opción -A (todos) con add .

Esto organiza automáticamente todos los archivos modificados junto con todos los archivos actualmente sin seguimiento . La preparación de archivos sin seguimiento respeta la configuración de su archivo ".gitignore". Git no organizará los archivos que le hayas dicho que no quieres que se incluyan. Finalmente, los archivos en el índice que ya no están en el directorio de trabajo se eliminan del índice.

Claramente, la opción -A puede hacer que sucedan muchas cosas a la vez. La opción --dry-run le brinda una vista previa de los cambios sin realizarlos realmente.

 git add -A --ejecución en seco 

Uso de --dry-run para obtener una vista previa de los archivos que se prepararán y no prepararán

En nuestro ejemplo, organizará dos archivos existentes modificados y dos archivos nuevos. Avancemos y usemos la opción -A antes de usar el comando commit .

 git añadir -A
 git commit -m "Análisis mejorado" 

Confirmar archivos modificados y recién creados, después de usar la opción agregar -A

Podemos ver que en total se modifican cuatro archivos. Dos de ellos son los archivos recién creados, que se enumeran.

Puesta en escena y compromiso al mismo tiempo

El comando commit tiene una opción minúscula -a (todos). Esto realiza la puesta en escena y la confirmación de archivos en un solo paso.

La opción commit -a organiza y confirma los archivos existentes modificados y elimina los archivos del índice si se han eliminado de su directorio de trabajo. No organiza automáticamente los archivos sin seguimiento.

Al igual que el comando add , el comando confirmar tiene una opción --dry-run que le permite obtener una vista previa de sus acciones antes de ejecutarlo.

 git commit -a --ejecución en seco 

Uso de la opción commit -a para obtener una vista previa de los cambios sin realizarlos

Ahora vamos a ejecutar el comando.

 git commit -a --ejecución en seco 

Usando la opción commit -a para organizar y confirmar en un solo paso

Los archivos están organizados y comprometidos para nosotros.

Comprometerse con una sucursal diferente

Si ha realizado algunos cambios en los archivos de su directorio de trabajo, entonces se da cuenta de que no revisó la rama correcta, necesita confirmar sus cambios en la rama correcta sin afectar la rama actual.

Git no tiene un comando para comprometerse con una rama diferente. Pero puedes rectificar esta situación con un poco de destreza Git.

Usaremos el comando stash de Git para hacer una copia de los cambios. Luego revisaremos la rama correcta y aplicaremos los cambios desde el alijo. Para aplicar los cambios ocultos, usamos el comando pop en lugar del comando apply . El comando pop aplica los cambios y también los elimina del alijo.

Hicimos algunos cambios en la rama new-parser de nuestro repositorio. Deberían haberse hecho en la rama classic-parser .

 alijo de git
 git checkout analizador clásico
 git escondite pop 

Guardar cambios, revisar una rama y aplicar los cambios desde el alijo

Ahora podemos realizar una commit y actualizar esta rama.

 git commit -a -m "Funciones previas al analizador agregadas" 

Confirmar los cambios que se recuperaron del alijo

Si volvemos a la rama new-parser podemos ver que está actualizada, lo que significa que los cambios se han eliminado de su directorio de trabajo y su repositorio y archivos están sincronizados.

 git checkout nuevo analizador
 estado de Git 

Comprobación del estado de una sucursal para asegurarse de que esté actualizada

RELACIONADO: Cómo actualizar y mantener ramas separadas de Git

Hacer cambios en las confirmaciones

Si necesita mejorar su mensaje de confirmación, tal vez haya detectado un error tipográfico en él, o si olvidó preparar un archivo que debería haberse incluido en la confirmación, puede usar la opción --amend para arreglar las cosas. La advertencia es que esto no debe usarse en confirmaciones que se han enviado a un repositorio remoto.

En nuestro último mensaje de confirmación, "fraze" debería haber sido "frase". Si usamos git log podemos ver esto.

El registro de Git con un tipo resaltado

Para corregir esto, usaremos la opción --amend como esta.

 git commit --amend -m "Identificación de frase optimizada" 

Usar la opción commit --amend para corregir un mensaje de confirmación

Si usamos git log una vez más, podemos ver que la confirmación anterior ha sido reemplazada por una nueva con el mensaje de confirmación corregido.

El registro de Git que muestra el mensaje de confirmación corregido

Si queremos agregar un archivo que olvidamos preparar, podemos confirmar ese archivo para que aparezca como parte de la confirmación anterior.

Usaremos add para organizar el archivo, luego haremos una confirmación con la opción --amend . La opción --no-edit significa que no necesitamos proporcionar un nuevo mensaje de confirmación. El mensaje de confirmación anterior se conserva.

 git agregar jibber.c
 git commit --enmendar --no-editar 

Enviar un archivo a la confirmación anterior

Eliminación de cambios de una confirmación

Si sin darte cuenta preparaste y confirmaste un archivo que no tenías la intención, puedes eliminar ese archivo de la confirmación usando el comando reset . Restableceremos la confirmación de nuevo al área de ensayo o índice. Luego, eliminaremos el archivo y volveremos a confirmar el resto de los archivos.

Para restablecer la última confirmación en el área de preparación, usamos el comando reset --soft . HEAD~ es la abreviatura de "el compromiso detrás del HEAD de la línea de tiempo del compromiso del proyecto", o en inglés, "el último compromiso".

 git reset --cabeza blanda~ 

Enviar el último compromiso de vuelta al área de ensayo

Para eliminar el archivo que no debería haberse incluido, usamos el comando reset --mixed . Esto restablece esos cambios nuevamente en el directorio de trabajo, recreando el archivo modificado como un archivo no preparado y no confirmado.

 git reset --jibber mixto.c 

Eliminación de un archivo del área de ensayo de Git

Necesitamos confirmar los otros archivos que quedan en el índice.

 git commit -m "Ajustes experimentales" 

Confirmar los archivos que permanecen en el área de ensayo

Los otros dos archivos que estaban en la confirmación original se vuelven a confirmar para nosotros.

RELACIONADO: Cómo corregir, editar o deshacer confirmaciones de Git (cambio del historial de Git)

Revertir una confirmación completa

A veces, deshacer una confirmación completa es lo más fácil de hacer. Devuelve el directorio de trabajo y el repositorio al estado en el que se encontraban antes de confirmar.

Necesitamos usar el ID de referencia hash de la confirmación. Podemos encontrar esto usando git log :

El registro de Git con un identificador de confirmación resaltado

Copie esa referencia y utilícela en el comando revert :

 git revertir e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

Revertir una confirmación identificada por su ID de confirmación

Esto abrirá su editor predeterminado para que pueda editar un mensaje de reversión. Hay un mensaje predeterminado ingresado para usted. Puede usar esto o editarlo a su gusto.

Edición del mensaje de reversión, con el mensaje predeterminado resaltado

Cuando esté satisfecho con su mensaje de reversión, guarde el archivo y salga del editor. En nano, haces esto con "Ctrl+O" y "Ctrl+X".

La acción de reversión completada, deshaciendo una confirmación completa

Usando git log una vez más, podemos ver que se ha agregado una nueva confirmación que deshace los cambios de la confirmación revertida.

La navaja suiza Git

Obviamente, commit es uno de los comandos Git más importantes. Puede hacer mucho, así que hay mucho que aprender. Familiarizarse con sus funciones menos utilizadas es tiempo bien invertido. Cuando necesite corregir un error, ahora mismo, se alegrará de haberse preparado con anticipación.

RELACIONADO: Cómo usar Git merge