W3docs

git commit

Aprende qué es git commit, cómo funciona y cuáles son sus opciones más comunes en este tutorial de Git.

El comando git commit registra los cambios que has preparado en el área de staging en el historial del repositorio como una nueva instantánea. Cada commit es un punto permanente y nombrado al que puedes volver, comparar con otros o compartir. Esta página explica qué es un commit, cómo encaja el flujo de trabajo de preparar y confirmar cambios, las opciones más útiles, cómo escribir buenos mensajes de commit y en qué se diferencia el modelo de instantáneas de Git de sistemas más antiguos como SVN.

Definición

El comando git commit guarda todos los cambios actualmente preparados 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 viven en tu historial local y Git no las modificará silenciosamente. Antes de ejecutar git commit, usas el comando git add para preparar los cambios que el commit almacenará.

Un commit está compuesto de tres elementos:

  • Una instantánea de cada archivo rastreado en el momento en que realizas el commit (no un diff — consulta Instantáneas, no diferencias más abajo).
  • Metadatos: el autor, una marca de tiempo y el mensaje que escribes.
  • Un puntero padre al commit anterior, que es como Git construye un historial que puedes explorar con git log.

Cada commit se identifica por un hash SHA-1 único de 40 caracteres (por ejemplo 9fceb02...), que puedes abreviar a los primeros siete caracteres cuando haces referencia a él.

Cómo funciona

Las instantáneas de Git se confirman en tu repositorio local. Git te permite acumular commits localmente en lugar de enviar cambios inmediatamente a un servidor central. Los publicas más tarde con git push. Esta separación ofrece varias ventajas:

  • Dividir una funcionalidad en commits para que cada paso sea pequeño y revisable.
  • Agrupar cambios relacionados en un único commit autocontenido.
  • Limpiar el historial local (aplastar, renombrar, reordenar) antes de compartirlo.
  • Trabajar sin conexión — puedes hacer commits en un avión y enviarlos cuando te reconectes.

El ciclo de vida típico de un cambio es directorio de trabajo → área de staging → commit: editas archivos, ejecutas git add para preparar las partes que deseas y luego git commit para registrarlas. Todo lo que no prepares permanece en tu directorio de trabajo y queda fuera del commit.

Opciones comunes

git commit -aConfirma una instantánea de todos los cambios en el directorio de trabajo. Solo se incluyen las modificaciones de archivos ya rastreados.
git commit -m "commit message"Crea un commit con el mensaje de commit proporcionado. Por defecto, git commit abre el editor de texto configurado localmente para que introduzcas un mensaje de commit.
git commit -am "commit message"Combina las opciones -a y -m para preparar todos los archivos rastreados modificados y crear un commit con un mensaje en línea.
git commit --amendModifica el último commit. Los cambios preparados se añaden al commit anterior y el editor se abre para que puedas cambiar el mensaje.
Advertencia

git commit -a (y -am) solo prepara los archivos que Git ya está rastreando. Los archivos completamente nuevos nunca se recogen automáticamente — primero debes hacer git add. Ejecuta git status si tienes dudas.

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 prepararlo con el comando git add.

Comando git add

git add w3docs.txt

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

git status

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

git commit

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

git commit en el editor

# 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

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 es el asunto; el resto es el cuerpo. Guarda y cierra el editor para finalizar el commit.

Escribir un buen mensaje de commit

Un mensaje claro hace que el historial sea fácil de buscar y la revisión más sencilla. La convención ampliamente utilizada es:

  • Mantén la línea de asunto en menos de 50 caracteres y escríbela en modo imperativo ("Add login form", no "Added" ni "Adds").
  • No termines el asunto con un punto.
  • Deja una línea en blanco entre el asunto y el cuerpo — muchas herramientas dependen de ello.
  • Ajusta el cuerpo a unos 72 caracteres y explica por qué se realizó el cambio, no solo qué cambió.

Confirmar cambios con un mensaje en línea

Para cambios pequeños y de propósito único, normalmente omites el editor y pasas el mensaje directamente:

git commit -m "Update greeting in w3docs.txt"

Usa git commit -am "..." para preparar todos los archivos rastreados modificados y confirmarlos en un solo paso.

Cómo actualizar (modificar) un commit

git commit --amend reemplaza el commit más reciente en lugar de añadir uno nuevo. Es útil cuando olvidaste preparar un archivo o quieres corregir un error tipográfico en el último mensaje. El editor se abre ya rellenado con el mensaje anterior:

git add y git commit

git add w3docs.txt
git commit --amend

Para modificar solo el mensaje sin abrir el editor:

git commit --amend -m "Corrected commit message"
Advertencia

Modificar un commit reescribe el último commit y le asigna un nuevo hash. Solo modifica commits que no hayas enviado y compartido todavía — reescribir el historial público obliga a todos los demás a reconciliar sus copias. Para deshacer un commit que aún no has compartido, usa git reset.

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 los cambios desde el cliente local a un repositorio centralizado. En Git, las instantáneas se confirman en el repositorio local. Los commits de Git pueden enviarse a repositorios remotos arbitrarios.

Instantáneas, no diferencias

Git se basa en instantáneas, mientras que SVN rastrea 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 vuelve a almacenar, lo que optimiza el almacenamiento.

git file diff

Snapshots

Comandos relacionados

  • git add — prepara los cambios antes de confirmarlos.
  • git status — ve qué está preparado y qué no.
  • git log — explora el historial de commits realizados.
  • git reset — desecha archivos del staging o deshaz un commit.
  • git push — publica tus commits locales en un repositorio remoto.

Práctica

Práctica
¿Cuáles son las características y opciones del comando 'git commit'?
¿Cuáles son las características y opciones del comando 'git commit'?
Was this page helpful?