git add
Añadir el contenido de los archivos al índice (área de preparación)
El comando 'git add' actualiza el índice con el contenido actual del árbol de trabajo, para preparar el contenido del próximo commit. El índice, también llamado área de preparación, es lo que usas para preparar el contenido del próximo commit. Cuando ejecutas 'git commit' sin otros argumentos, solo se incluyen los cambios preparados. Este comando puede ejecutarse varias veces antes de un commit para ir añadiendo cambios poco a poco.
Sinopsis
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--all | -A] [--update | -u] [--] [<pathspec>...]Opciones
Elegir la opción adecuada
Comandos de preparación
Qué archivos se preparan con cada comando
| Comando | Archivos nuevos | Archivos modificados | Archivos borrados | Alcance |
|---|---|---|---|---|
git add <file> | ✓ | ✓ | ✓ | Solo el archivo indicado |
git add . | ✓ | ✓ | ✓ | Directorio actual y subdirectorios |
git add -A | ✓ | ✓ | ✓ | Todo el repositorio |
git add -u | ✗ | ✓ | ✓ | Solo archivos con seguimiento |
git add --no-all | ✓ | ✓ | ✗ | Ignora los borrados |
Opciones interactivas
Opciones para controlar al detalle lo que se prepara
| Comando | Modo | Granularidad | Caso de uso |
|---|---|---|---|
git add -p | Patch | Fragmento a fragmento | Preparar cambios concretos de un archivo |
git add -e | Editor | Línea a línea | Editar el diff a mano antes de preparar |
git add -i | Menú | Archivo a archivo | Menú de preparación interactivo completo |
Opciones de vista previa y salida
Opciones que muestran información sin modificar el área de preparación
| Comando | Acción | Modifica el índice | Propósito |
|---|---|---|---|
git add -n | Dry-run | ✗ | Previsualizar lo que se prepararía |
git add -v | Detallado | ✓ | Mostrar los archivos a medida que se preparan |
git add --refresh | Refrescar | ✗ | Actualizar solo la información stat |
Archivos especiales
Opciones para archivos que necesitan un trato especial
| Comando | Gestiona | Comportamiento | Uso típico |
|---|---|---|---|
git add -f | Archivos ignorados | Saltarse .gitignore | Añadir un archivo que normalmente se ignora |
git add -N | Archivos nuevos | Intención de añadir (vacío) | Seguir un archivo para git diff sin prepararlo |
git add --chmod=+x | Ejecutables | Fijar el modo del archivo | Hacer ejecutables los scripts |
git add --sparse | Archivos sparse | Fuera del cono | Preparar archivos fuera del sparse checkout |
Opciones avanzadas
Opciones de nivel experto para casos concretos
| Comando | Propósito | Cuándo usarla |
|---|---|---|
git add --renormalize | Volver a aplicar los filtros clean | Tras cambiar los finales de línea en .gitattributes |
git add --pathspec-from-file | Leer rutas desde un archivo | Preparar muchos archivos a partir de una lista |
git add --ignore-errors | Seguir pese a los errores | Prepara lo que puedas y salta los fallos |
git add --no-warn-embedded-repo | Silenciar el aviso de submódulo | Añadir repositorios anidados a propósito |
Ejemplos de flujos de trabajo
git statusRevisar primero todos los cambios
git add -APreparar todos los archivos nuevos, modificados y borrados
git commit -m "Your message"Hacer commit de todos los cambios preparados
git add -pElegir de forma interactiva solo los cambios del arreglo (pulsa 'y' en los fragmentos del arreglo y 'n' en los de la funcionalidad)
git commit -m "Fix login validation bug"Hacer commit solo del arreglo
git add -APreparar ahora los cambios restantes de la funcionalidad
git commit -m "Add dark mode toggle"Hacer commit de la funcionalidad por separado
git statusVer qué está modificado y qué no tiene seguimiento
git add -uPreparar solo las modificaciones de archivos con seguimiento
git statusComprobar que los archivos nuevos siguen sin seguimiento
git commit -m "Update existing files"Hacer commit sin los archivos nuevos
git add -n .El dry-run muestra lo que se añadiría
git diffRevisar en detalle los cambios reales
git add .Si todo está bien, preparar de verdad
git add dist/bundle.jsEsto falla: el archivo está ignorado
git add -f dist/bundle.jsForzar el añadido se salta .gitignore
git commit -m "Add build for deployment"Hacer commit del archivo que normalmente se ignora
Teclas del modo interactivo
Atajos de teclado de los modos interactivos de git add. Funcionan en el modo patch (-p) y en el modo interactivo (-i).
Modo patch
-pModo interactivo
-iSolución de problemas
El archivo no se añade (está ignorado)
Causa: El archivo coincide con un patrón de .gitignore
Busca el patrón que coincide en .gitignore. Usa -f para forzar el añadido si es intencionado.
git add -f <file>Error «Permission denied»
Causa: El archivo está bloqueado por otro proceso o no tienes permiso de lectura
Cierra las aplicaciones que usan el archivo o revisa sus permisos. Usa --ignore-errors para seguir con los demás archivos.
git add --ignore-errors .No pasa nada al ejecutar git add
Causa: Puede que los archivos ya estén preparados o que no haya cambios que añadir
Ejecuta git status para ver el estado actual. Los archivos ya preparados no se vuelven a añadir.
git statusLos archivos nuevos no aparecen en git diff
Causa: Los archivos sin seguimiento no aparecen en git diff por defecto
Usa git add -N para marcar la intención de añadir; entonces git diff mostrará el contenido.
git add -N <file> && git diffAviso sobre un repositorio git anidado
Causa: Estás añadiendo una carpeta que contiene su propio directorio .git (un repositorio anidado)
Borra la carpeta .git anidada, usa submódulos de git o silencia el aviso.
git add --no-warn-embedded-repo <folder>Los finales de línea siguen apareciendo como cambios
Causa: Finales de línea incoherentes (CRLF frente a LF) entre tu sistema y el repositorio
Configura .gitattributes con 'text=auto' y renormaliza todos los archivos.
git add --renormalize .Algunos scripts (p. ej. git diff-files) marcan archivos como modificados aunque el contenido no cambió
Causa: Cambiaron las marcas de tiempo de los archivos, así que la información stat guardada en el índice está desfasada
Refresca el índice para actualizar la información stat sin preparar nada. (git status lo refresca automáticamente.)
git add --refresh .Consejos y trampas
Buenas prácticas
- ✓Revisa los cambios antes de prepararlos: usa 'git diff' para ver lo que vas a preparar, o 'git add -p' para revisarlo de forma interactiva.
- ✓Prepara juntos los cambios relacionados: agrupa en un solo commit los cambios que tienen relación lógica. No mezcles arreglos de bugs con funcionalidades nuevas.
- ✓Usa 'git add -p' para cambios grandes: si hiciste varios cambios sin relación en un archivo, usa el modo patch para prepararlos por separado.
- ✓Consulta git status a menudo: ejecuta siempre 'git status' antes y después de preparar para comprobar qué entrará en el commit.
- ✓Cuidado con 'git add .': prepara todo lo que hay en el directorio actual. Considera indicar nombres de archivo concretos o usar 'git add -p' para tener más control.
- ✓Configura .gitignore primero: antes de tu primer 'git add', asegúrate de que .gitignore excluye los artefactos de build, las dependencias y los archivos sensibles.
- ✓Usa dry-run para comprobar: si tienes dudas, usa 'git add -n .' para ver lo que se prepararía sin preparar nada.
- ✓Prepara los borrados de forma explícita: borrar un archivo en local no prepara el borrado. Usa 'git add -u' o 'git add -A' para incluir los borrados.
Errores comunes
- ✗'git add .' frente a 'git add -A': los dos preparan archivos nuevos, modificados y borrados, pero '.' solo abarca el directorio actual hacia abajo, mientras que '-A' abarca todo el árbol de trabajo.
- ✗Olvidar que 'git add' no hace commit. Los archivos solo quedan preparados y necesitan 'git commit' para registrarse.
- ✗Añadir archivos que deberían ignorarse. Revisa siempre tu .gitignore antes de ejecutar 'git add -A' o 'git add .'
- ✗No revisar los cambios antes de prepararlos. Usa 'git add -p' para revisar con más cuidado lo que preparas.
- ✗Confundir 'git add -u' con 'git add -A': '-u' solo prepara modificaciones y borrados de archivos con seguimiento, no archivos nuevos sin seguimiento.
Preguntas frecuentes
Desde Git 2.0 los dos preparan archivos nuevos, modificados y borrados. La diferencia es el alcance: 'git add .' solo abarca el directorio actual y sus subdirectorios, mientras que 'git add -A' abarca todo el repositorio, estés en el directorio que estés.
Probablemente el archivo aparece en .gitignore. Compruébalo con 'git check-ignore <file>'. Si necesitas añadirlo de todos modos, fuérzalo con 'git add -f <file>'.
¡Sí! Usa 'git restore --staged <file>' (o 'git reset HEAD <file>' en versiones antiguas de Git) para quitar un archivo del área de preparación sin perder tus cambios.
Usa 'git add -p <file>' para entrar en el modo patch interactivo. Git te muestra cada cambio (hunk) y te deja elegir cuáles preparar con y/n.
Suele deberse a cambios de final de línea (CRLF/LF) o de permisos. Mira 'git diff' para ver qué cambió. Configura .gitattributes para gestionar los finales de línea.
Añade primero a .gitignore los archivos que quieras excluir y luego usa 'git add .'. Otra opción es añadir los archivos uno a uno o usar patrones como 'git add *.js'.
Le dice a Git que piensas añadir el archivo más adelante. El archivo pasa a tener seguimiento (aparece en git diff), pero su contenido aún no se prepara. Útil para revisar archivos nuevos antes del commit.
No, Git solo sigue archivos, no directorios. El truco habitual es añadir un archivo .gitkeep o .gitignore dentro del directorio vacío.