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 -a | Confirma 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 --amend | Modifica el último commit. Los cambios preparados se añaden al commit anterior y el editor se abre para que puedas cambiar el mensaje. |
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.txtEjecutar 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.txtLa salida indica que w3docs.txt se guardará con el próximo commit. El commit se crea ejecutando:
Git commit
git commitEjecutar 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.txtEl 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 messageLa 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 --amendPara modificar solo el mensaje sin abrir el editor:
git commit --amend -m "Corrected commit message"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.


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.