Saltar al contenido

git commit

Definición

El comando git commit guarda todos los cambios actualmente en el área de preparación (staging) del proyecto. Los commits se crean para capturar el estado actual de un proyecto. Las instantáneas confirmadas se consideran versiones seguras de un proyecto porque Git pregunta antes de modificarlas. Antes de ejecutar el comando git commit, se utiliza el comando git add para preparar los cambios que luego se almacenarán en un commit.

Cómo funciona

Las instantáneas de Git se confirman en el repositorio local. Git te permite acumular commits localmente, en lugar de enviar cambios inmediatamente a un repositorio central. Esto ofrece muchas ventajas, como dividir una función en commits, agrupar commits relacionados y limpiar el historial local antes de enviarlo al repositorio central. Esto también le da a los desarrolladores la oportunidad de trabajar de forma aislada.

Opciones comunes

git commit -aConfirma una instantánea de todos los cambios en el directorio de trabajo. Solo se incluyen las modificaciones de los archivos rastreados.
git commit -m "commit message"Crea un commit con el mensaje de confirmación proporcionado. Por defecto, git commit abre el editor de texto configurado localmente para ingresar un mensaje de commit.
git commit -am "commit message"Combina las opciones -a y -m para preparar todos los archivos modificados y rastreados, y crear un commit con un mensaje en línea.
git commit --amendModifica el último commit. Los cambios preparados se agregan al commit anterior. Este comando abre el editor de texto configurado del sistema y cambia el mensaje de commit especificado anteriormente.

Guardar cambios con un commit

En el siguiente ejemplo, tenemos el archivo w3docs.txt con contenido modificado en la rama actual. Para confirmar la instantánea preparada del archivo, primero debes preparar el archivo con el comando git add.

Comando git add

bash
git add w3docs.txt

Ejecutar git add moverá el archivo w3docs.txt al área de preparación de Git. Usa el comando git status para ver la salida.

git status

bash
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: w3docs.txt

La salida indica que w3docs.txt se guardará con el próximo commit. El commit se crea ejecutando:

Git commit

bash
git commit

Ejecutar git commit abre un editor de texto (podemos configurarlo mediante git config) solicitando un mensaje de registro de commit y una lista de lo que se está confirmando:

git commit en el editor

bash
# Enter the commit message of your changes. Lines that start
# with '#' will be ignored, an empty message breaks off the commit.
# On branch master
# Changes needed to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: w3docs.txt

El formato de commit convencional de Git resume el cambio en la primera línea en menos de 50 caracteres, seguido de una línea en blanco y una explicación detallada. Por ejemplo:

Mensaje de git commit

bash
Change the message displayed by w3docs.txt

- Update the sayHello() function to get the username
- Change the sayGoodbye() function to a more welcoming message

La primera línea del mensaje de commit es la línea del asunto, el resto es su cuerpo.

Cómo actualizar (modificar) un commit

El siguiente ejemplo abre el editor de texto configurado prellenado con el mensaje de commit ya ingresado. Esto significa que estás editando el último commit en lugar de crear uno nuevo.

git add y git commit

bash
git add w3docs.txt
git commit --amend

Git commit vs svn commit

SVN es un modelo de aplicación centralizado, mientras que Git es un modelo de aplicación distribuido. SVN commit envía cambios desde el cliente local a un repositorio centralizado. En Git, las instantáneas se confirman en el repositorio local. Los commits de Git se pueden enviar a repositorios remotos arbitrarios.

Instantáneas, no diferencias

Git se basa en instantáneas, mientras que SVN rastrea las diferencias en los archivos. Un svn commit registra un diff que se aplica al archivo original en el repositorio. Git registra el estado completo del proyecto en cada commit. Al guardar el estado del proyecto, Git toma una instantánea de los archivos actuales y almacena una referencia a esa instantánea. Si un archivo no ha cambiado, Git no lo almacena nuevamente, lo que optimiza el almacenamiento.

git file diff

Snapshots

Práctica

¿Cuáles son las características y opciones del comando 'git commit'?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.