El comando git commit guardará todos los cambio hechos en la zona de montaje o área de preparación (staging area), junto con una breve descripción del usuario, en un "commit" al repositorio local.

Los commits están en el corazón del uso de Git. Puedes pensar en un commit como una captura de tu proyecto, donde se crea una nueva versión de ese proyecto en el repositorio actual. Dos características importantes de los commits son:

  • puedes recordar los cambios a los que se les hizo commits en una fecha posterior, o revertir el proyecto a esa versión (ver Git checkout)
  • si varios commits editan diferentes partes del proyecto, no se sobrescribirán entre sí aunque los autores de los commits no se conozcan entre sí. Este es uno de los beneficios de usar Git sobre una herramienta como Dropbox o Google Drive.

Opciones

Hay un número de opciones que puedes incluir con git commit. Sin embargo, esta guía sólo cubrirá las dos opciones más comunes. Para una lista extensa de opciones, por favor consulta la documentación de Git.

La Opción -m

La opción más común utilizada con git commit es la opción -m. La -m significa mensaje. Cuando se llama a git commit, es necesario incluir un mensaje. El mensaje debe ser una breve descripción de los cambios a los que se les está realizando commit. El mensaje debe estar al final del comando y debe estar envuelto entre comilla " ".

Un ejemplo de cómo usar la opción -m:

git commit -m "Mi mensaje"

La salida de tu terminal debería ser algo así:

[master 13vc6b2] Mi mensaje
 1 file changed, 1 insertion(+)

NOTA: Si la -m no está incluida en el comando git commit, se te pedirá que agregues un mensaje en tu editor de texto predeterminado - ve "Uso de mensajes de commit detallados" más abajo.

La Opción -a

Otra opción popular es la opción -a. La -a representa todo (all). Esta opción prepara automáticamente todos los archivos para realizarles commit. Si se agregan nuevos archivos, la opción -a no los preparará. Solo se confirmarán los archivos que el repositorio de Git tenga conocimiento.

Por ejemplo:

Digamos que tienes un archivo README.md que ya se le ha realizado commit en el repositorio. Si haces cambios en este archivo, puedes usar la opción -a en tu comando commit para preparar y agregar los cambios a tu repositorio. Sin embargo, ¿qué pasaría si también agregara un nuevo archivo llamado index.html? La opción -a no pondrá en escena (no lo pondrá en el staging area) el index.html ya que no existe actualmente en el repositorio. Cuando se han agregado nuevos archivos, el comando git add debería ser invocado para preparar los archivos antes de que se les realice commit en el repositorio.

Un ejemplo de cómo usar la opción -a:

git commit -am “Mis nuevos cambios”

La salida de tu terminal debería ser algo así:

[master 22gc8v1] Mis nuevos cambios
 1 file changed, 1 insertion(+)

Uso de mensajes de commit detallados

Aunque git commit -m "mensaje de commit" funciona muy bien, puede ser útil para proporcionar información más detallada y sistemática.

Si realizas un commit sin usar la opción -m, git abrirá tu editor de texto por defecto con un nuevo archivo, que incluirá una lista comentada de todos los archivos/cambios que se han puesto en escena en el commit. Luego escribes tu mensaje de commit detallado (la primera línea será tratada como la línea de asunto) y el commit se realizará cuando guardes/cierres el archivo.

Ten en cuenta:

  • Mantén la longitud de tus líneas de mensajes de commit por debajo de 72 caracteres como práctica estándar.
  • Está perfectamente bien, e incluso recomendado, escribir mensajes de commit multilínea.
  • También puedes referirte a otros temas o a pull requests en tu mensaje de commit. GitHub asignó un número de referencia a todos los pull requests e issues, así que por ejemplo si quieres referirte al pull request #788 simplemente hazlo en la línea de asunto o en el cuerpo del texto según sea apropiado.

La Opción --amend

La opción --amend te permite cambiar tu último commit. Digamos que acabas de realizar un commit y cometiste un error en tu mensaje de commit. Puedes modificar convenientemente el último commit usando el comando:

git commit --amend -m "un mensaje de commit actualizado"

Si se te olvida incluir un archivo en el commit:

git add NOMBRE-DEL-ARCHIVO-OLVIDADO
git commit --amend -m "un mensaje de commit actualizado"

# Si no necesitar cambiar el mensaje de commit, usa la opción --no-edit
git add NOMBRE-DEL-ARCHIVO-OLVIDADO
git commit --amend --no-edit

Los commits prematuros suceden todo el tiempo en el curso del desarrollo diario. Es fácil olvidarse de preparar un archivo o de cómo formatear correctamente tu mensaje de commit. La bandera --amend es una forma conveniente de corregir estos pequeños errores. Este comando sustituirá el antiguo mensaje de commit por el actualizado que se especifica en el comando.

Los commits enmendados son en realidad commits completamente nuevos y el commit anterior ya no estará en tu rama actual. Cuando estés trabajando con otros, deberías intentar evitar modificar los commits si el último commit ya se encuentra empujado (en la nube o remoto) en el repositorio.

Con --amend, una de las opciones útiles que puedes usar es --author, que te permite cambiar el autor del último commit que has hecho. Imagina una situación en la que no has configurado correctamente tu nombre o tu correo electrónico en las configuraciones de git, pero ya has hecho un commit. Con la bandera --author puedes simplemente cambiarlos sin reiniciar el último commit.

git commit --amend --author="John Doe <johndoe@email.com>"

La Opción -v o --verbose

La opción -v o --verbose se usa sin la opción -m. La opción -v puede ser útil para cuando deseas editar un mensaje de commit de Git en tu editor por defecto, mientras que puedes ver los cambios que has hecho para el commit. El comando abre tu editor de texto por defecto con una plantilla de mensaje de commit, así como una copia de los cambios que has realizado para este commit. Los cambios, o diferencias (diff), no se incluirán en el mensaje de commit, pero proporcionan una bonita forma de referenciar tus cambios cuando los describas en tu mensaje de commit.

Cómo aplastar varios commits en uno solo

Esta es una característica genial de rebase que puede ser usada en el modo interactivo. Para aplastar los últimos n commits en uno, ejecuta el siguiente comando:

git rebase -i HEAD~n

Eso abrirá tu editor de texto con algo similar a lo siguiente:

pick commit_1
pick commit_2
pick commit_3
...
pick commit_n
# Un montón de comentarios

Deja el primer commit solo, y cambia el resto de los picks por squash. Guarda y sal del editor.

Así que si quieres aplastar (squash) los últimos tres commits, primero ejecutarás git rebase -i HEAD~3 y luego querrás editar tus commits para que se parezcan a esto:

pick dd661ba Commit 1
squash 71f5fee Commit 2
squash f4b4bf1 Commit 3

Si ya has empujado a remoto antes de aplastar tus commits, tendrás que volver a empujar a remoto de nuevo, con la bandera -f, de lo contrario git te arrojará un error.

Se recomienda encarecidamente que leas la información del archivo abierto, ya que hay muchas cosas que puedes hacer.

Más información:

Traducido del artículo - Git Commit Command Explained