git statusMuestra el estado de los archivos modificados y sin seguimiento
Úsalo antes de agregar archivos para verificar qué ha cambiado exactamente.
Git no es una caja negra: tus archivos se mueven a través de 4 estados clave. Toca cualquier flecha del diagrama interactivo o categoría inferior para descubrir los comandos exactos y cómo usarlos.

De la carpeta de trabajo al área de preparación (Staging Area).
git statusMuestra el estado de los archivos modificados y sin seguimiento
Úsalo antes de agregar archivos para verificar qué ha cambiado exactamente.
git diffMuestra línea por línea los cambios aún no preparados
Compara tu carpeta de trabajo contra el área de preparación.
git add Prepara un archivo específico para el próximo commit
Ejemplo: git add index.html estilos.css
git add .Prepara todos los cambios en el directorio actual y subdirectorios
Incluye modificaciones, creaciones y eliminaciones.
git add -pModo interactivo: permite revisar y preparar fragmento por fragmento
Ideal para commits limpios con cambios específicos por partes.
Del área de preparación al repositorio local como una instantánea permanente.
git commit -m "feat: mensaje claro"Crea un nuevo commit con un mensaje descriptivo
Sigue convenciones como Conventional Commits (feat, fix, docs, refactor).
git commit -am "mensaje"Prepara archivos rastreados y hace el commit en un solo paso
No incluye archivos nuevos que nunca han sido rastreados por Git.
git commit --amendModifica el último commit (agrega cambios o corrige el mensaje)
Úsalo solo antes de haber subido el commit al repositorio remoto.
git log --oneline --graph --decorateVisualiza el historial de commits en un gráfico de una línea
Excelente para entender la bifurcación y unión de ramas.
Transfiere tus commits locales a un servidor remoto como GitHub o GitLab.
git remote add origin Conecta el repositorio local con un repositorio remoto
Ejemplo: git remote add origin https://github.com/usuario/repo.git
git push -u origin mainSube tus commits por primera vez y asocia la rama local con la remota
La bandera -u (upstream) te permite usar simplemente "git push" después.
git pushSube los commits nuevos a la rama remota vinculada
Asegúrate de que tus cambios locales estén sincronizados primero.
git push origin --delete Elimina una rama remota en el servidor
Útil para limpiar ramas de características ya fusionadas en producción.
Descarga los cambios de GitHub y los fusiona directamente en tu carpeta de trabajo.
git pullDescarga y fusiona los cambios remotos en tu rama actual
Equivale a ejecutar "git fetch" seguido de "git merge".
git pull --rebaseAplica tus commits locales por encima de los cambios remotos
Evita commits de unión innecesarios y mantiene un historial lineal.
git fetchDescarga referencias e historiales remotos sin modificar tus archivos
Permite inspeccionar lo nuevo con "git status" o "git diff origin/main".
git clone Clona un repositorio remoto completo en una nueva carpeta local
Descarga todas las ramas, etiquetas y el historial completo del proyecto.
Configuración inicial de Git y creación del primer repositorio.
git config --global user.name "Tu Nombre"Define tu nombre para que aparezca como autor en los commits
Se guarda en ~/.gitconfig y aplica a todos tus repositorios.
git config --global user.email "tu@correo.com"Define tu correo electrónico vinculado a tu cuenta de GitHub
Usa el mismo correo con el que te diste de alta en tu plataforma Git.
git config --global init.defaultBranch mainConfigura "main" como el nombre por defecto de la rama principal
Estándar moderno adoptado por Git, GitHub y GitLab.
git config --listMuestra todas las variables de configuración activas
Agrega --show-origin para saber en qué archivo está cada configuración.
git initInicializa un repositorio Git vacío en el directorio actual
Crea la carpeta oculta .git donde se almacena todo el control de versiones.
Crea líneas de desarrollo paralelas sin alterar la rama principal.
git branchLista todas las ramas locales (la activa aparece con un asterisco)
Usa "git branch -a" para listar también las ramas remotas.
git switch -c Crea una nueva rama y se traslada inmediatamente a ella
Sintaxis moderna recomendada en lugar de "git checkout -b".
git switch Cambia a una rama existente
Sintaxis moderna y segura que reemplaza "git checkout <rama>".
git merge Fusiona la rama indicada dentro de la rama en la que te encuentras
Por ejemplo, ubicado en "main", ejecuta "git merge feat-login".
git branch -d Elimina una rama local que ya ha sido fusionada
Usa -D (mayúscula) para forzar la eliminación si la rama no se ha fusionado.
Estrategias seguras y eficaces para corregir errores en cada fase.
git restore Descarta los cambios locales en un archivo no preparado
Devuelve el archivo al estado del último commit registrado.
git restore --staged Saca un archivo del área de preparación sin perder sus cambios
Reemplaza el antiguo y confuso "git reset HEAD <archivo>".
git reset --soft HEAD~1Deshace el último commit conservando todos los cambios preparados
Ideal para rehacer un commit con un mejor mensaje o cambios extra.
git reset --hard HEAD~1Deshace el último commit y elimina por completo los cambios
Peligro: Esta acción destruye los cambios no guardados.
git revert Crea un nuevo commit que invierte de forma segura los cambios de uno previo
Es la manera recomendada y segura de revertir commits ya subidos al remoto.
git stashGuarda temporalmente cambios sucios para limpiar el espacio de trabajo
Permite cambiar de rama rápidamente sin perder tu trabajo pendiente.
git stash popRestaura y elimina del almacén los últimos cambios guardados con stash
Vuelve a aplicar tu trabajo exactamente donde lo dejaste.
Coincidencias encontradas en todas las categorías de comandos.
Experimenta el ciclo de vida de Git en tiempo real. Ejecuta comandos de muestra y observa cómo responde la consola oficial y qué estado se activa en el flujo.
On branch main Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: src/app.js modified: public/styles.css Untracked files: (use "git add <file>..." to include in what will be committed) src/auth.js no changes added to commit (use "git add" to track)
Observa cómo se conectan y reordenan los commits en tiempo real al ejecutar operaciones de fusión o rebase en Git.
Aprende qué ocurre cuando Git se detiene en un merge o rebase. Practica resolviendo colisiones de código reales y comprende los marcadores <<<<<<< HEAD sin miedo.
Conflicto al actualizar el método de autenticación y tiempo de expiración del token JWT.
git add src/config/auth.tsgit merge --continuegit merge --abortDescubre qué commit exacto rompió producción mediante búsqueda binaria O(log N). Prueba estados de código o automatiza la búsqueda con tus tests.
El commit C8 está roto (bad) y C1 funcionaba correctamente (good). Haz clic en Iniciar para calcular el punto medio.
a1b2c3dfeat: setup base project structuree4f5a6bfeat: add user login endpointc7d8e9ffix: handle token expiration1a2b3c4perf: optimize sql queries in auth5e6f7a8refactor: change payload signature in parser9b0c1d2style: format response json outputs3e4f5a6docs: update api swagger documentation7b8c9d0feat: add analytics event pingExperimenta visualmente con el rebase interactivo. Reordena commits, fusiona arreglos rápidos con squash/fixup, edita mensajes o elimina cambios sin miedo. Descubre por qué Git recalcula los hashes SHA y crea un historial lineal limpio.
# git-rebase-todo previewLos errores en Git le pasan a todo el mundo. Encuentra tu escenario exacto y sigue los pasos comprobados para recuperar tu código sin pánico.
Mover el último commit a una nueva rama sin perder nada
Trabajaste y ejecutaste git commit directamente en la rama principal en lugar de crear una rama secundaria.
git branch mi-rama-correctaCrea la rama deseada exactamente en el punto actual con tu último commit incluido.
git reset --hard HEAD~1Retrocede la rama actual (main) un commit hacia atrás para dejarla limpia.
git switch mi-rama-correctaPasa a tu nueva rama donde tu commit sigue intacto y listo para continuar.
Si ya habías subido el commit al repositorio remoto, no uses reset --hard; recurre a git revert para crear un commit inverso seguro.
Corregir el commit más reciente de forma instantánea
Cometiste una errata en el texto del mensaje o te diste cuenta de que olvidaste incluir un archivo.
git add archivo-olvidado.js(Opcional) Si te faltó un archivo, prepáralo primero con git add.
git commit --amend -m "feat: nuevo mensaje corregido"Sobrescribe el mensaje y fusiona los archivos preparados en el commit previo sin duplicar historial.
Usa amend únicamente antes de haber hecho git push al servidor remoto.
Eliminar archivos sensibles antes de enviarlos a producción
Por error agregaste credenciales privadas a tu repositorio local.
git rm --cached .envElimina el archivo del índice de Git pero lo conserva físicamente en tu disco duro.
echo ".env" >> .gitignoreAgrega el archivo a .gitignore para que Git nunca más vuelva a rastrearlo.
git commit -m "fix: remover archivo sensible del control de versiones"Registra el cambio para que el archivo ya no exista en el próximo push.
Si ya hiciste push a GitHub, la clave debe considerarse comprometida y debe ser revocada/regenerada inmediatamente en el proveedor.
Guardar temporalmente el trabajo en un escondite seguro
Tu jefe o compañero te pide revisar algo urgente en otra rama, pero tu código actual no compila ni amerita un commit.
git stashLimpia tu espacio de trabajo y guarda todas tus modificaciones en una pila temporal.
git switch otra-ramaCambia de rama con el directorio totalmente limpio para realizar la tarea urgente.
git switch tu-ramaVuelve a tu rama original cuando hayas finalizado la urgencia.
git stash popRestaura tus cambios pendientes exactamente como los tenías y vacía el cajón.
Volver al estado seguro antes de iniciar el merge
Al ejecutar git merge o git pull aparecieron conflictos complicados y prefieres abortar para no romper nada.
git merge --abortCancela la fusión en curso y restaura tus archivos al estado previo al intento de mezcla.
git statusVerifica que tu árbol de trabajo ha vuelto a un estado completamente limpio.
Si el conflicto ocurrió durante un rebase, el comando equivalente es: git rebase --abort.
Rescatar código perdido con la bitácora universal de Git
Ejecutaste un reset agresivo o eliminaste una rama creyendo que no servía y perdiste tu trabajo.
git reflogMuestra un registro cronológico de todas las acciones recientes junto a sus identificadores hash.
git switch -c rama-recuperada <hash-encontrado>Crea una nueva rama partiendo exactamente del commit antes de ser perdido.
Los commits huérfanos se conservan en Git habitualmente por al menos 30 días antes del recolector de basura.
Aprende los procedimientos estándar de la industria. Cada paso incluye el comando a ejecutar y la razón conceptual detrás de él.
Ruta completa para inicializar una carpeta local y publicarla en un repositorio remoto.
Crea la estructura oculta .git dentro de tu carpeta actual.
git initMueve todos los archivos del proyecto al área de preparación.
git add .Registra la versión inicial en el historial permanente de tu computadora.
git commit -m "feat: estructura inicial del proyecto"Asigna el alias "origin" a la dirección web de tu repositorio.
git remote add origin https://github.com/usuario/mi-proyecto.gitEnvía tu rama main y la deja vinculada para futuros push rápidos.
git push -u origin mainEl estándar profesional utilizado por equipos en todo el mundo para trabajar en paralelo.
Descarga las últimas novedades aprobadas por tus compañeros.
git switch main && git pullAbre un carril separado con un nombre descriptivo.
git switch -c feat/autenticacion-googleGuarda pequeñas unidades atómicas de trabajo.
git add . && git commit -m "feat: agregar boton de login"Sube tu rama a GitHub para crear el Pull Request / Merge Request.
git push -u origin feat/autenticacion-googleAprende a identificar, resolver y confirmar cambios cuando dos personas editan las mismas líneas.
Git te avisará y marcará los archivos con colisión.
git statusAbre el archivo en tu editor de código para elegir la versión correcta.
git diffBorra los marcadores y añade el archivo resuelto al área de preparación.
git add archivo-arreglado.jsCompleta el commit de merge para continuar.
git commit -m "merge: resolver conflicto en archivo-arreglado.js"Aclara las confusiones más comunes en Git. Comprende las diferencias técnicas, ventajas y el momento exacto para usar cada alternativa.
git fetchDescarga referencias, ramas y commits del servidor remoto SIN modificar tus archivos locales.
Siempre que quieras curiosear qué hicieron tus compañeros sin alterar tu carpeta de trabajo.
git pullEquivale a ejecutar "git fetch" seguido automáticamente de "git merge".
Cuando sabes con certeza que quieres incorporar los cambios remotos de inmediato.
git mergeCrea un commit especial con dos padres que une dos líneas de tiempo preservando la historia exacta.
En ramas públicas y compartidas como main o desarrollo en equipo.
git rebaseCorta tus commits locales y los vuelve a pegar uno a uno encima de la punta más reciente de la otra rama.
En tus ramas personales antes de abrir un Pull Request para mantener un historial lineal y limpio.
git restore / git resetModifican archivos locales o mueven el puntero HEAD hacia atrás en el historial de tu máquina.
Antes de subir cambios al remoto. Para descartar cambios en progreso o sacar archivos de staging.
git revertCrea un NUEVO commit que aplica exactamente los cambios matemáticamente opuestos al commit que deseas anular.
Siempre que un cambio ya haya llegado a la rama principal en GitHub o producción.
git switchComando moderno (Git 2.23+) diseñado con un único propósito: cambiar o crear ramas.
Siempre que vayas a moverte de rama o crear una nueva con la opción -c.
git checkoutComando histórico multipropósito que servía tanto para cambiar ramas como para descartar cambios en archivos.
En tutoriales antiguos o proyectos con versiones muy viejas de Git.
Completa tus datos y obtén comandos exactos listos para copiar y pegar en tu terminal, siguiendo las mejores prácticas de la industria.
Crea ramas con nomenclatura estandarizada según el propósito del trabajo.
git switch -c feat/autenticacion-oauthGenera el bloque completo de comandos para publicar un proyecto local en GitHub de una sola vez.
Aprende a redactar mensajes claros y profesionales según la especificación Conventional Commits. Mejora el historial de tu equipo y facilita la generación automática de versiones y changelogs.
git commit -m "feat(auth): implementar autenticacion con tokens jwt"Evita subir por accidente secretos, contraseñas o carpetas gigantescas como node_modules/. Marca tus tecnologías y obtén tu archivo listo.
Los desarrolladores senior no teclean comandos largos una y otra vez. Configura atajos de alta velocidad y banderas recomendadas directamente en tu ~/.gitconfig.
Grafo de historial visual, ultra compacto y coloreado en una línea por commit.
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relativeEstado breve (short) mostrando la rama actual y la relación con upstream.
git status -sbSaca archivos del Staging Area sin perder las modificaciones locales.
git restore --stagedDeshace el último commit pero conserva todos los cambios en el Staging Area.
git reset --soft HEAD~1Agrega los archivos en staging al commit anterior sin abrir el editor de mensaje.
git commit --amend --no-editLista ramas locales con su último commit y estado de tracking remoto.
git branch -vvElimina de forma segura todas las ramas locales que ya fueron fusionadas.
git !git branch --merged | grep -v "\*" | xargs -n 1 git branch -dGuarda rápidamente un snapshot temporal de trabajo en progreso.
git !git add -A && git commit -m "chore: work in progress [skip ci]"Plantilla optimizada que incluye rebase automático al hacer pull, rama main por defecto y reutilización de resoluciones de conflictos grabadas (rerere).
[init]
defaultBranch = main
[pull]
rebase = true
[rerere]
enabled = true
[core]
autocrlf = input
[color]
ui = auto
[help]
autocorrect = 1
[alias]
st = status -sb
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
undo = reset --soft HEAD~1
unstage = restore --staged
amend = commit --amend --no-edit
br = branch -vv
cleanup = !git branch --merged | grep -v "\\*" | xargs -n 1 git branch -d
wip = !git add -A && git commit -m "chore: work in progress [skip ci]"Evita bugs, código desordenado y filtración de contraseñas antes de que lleguen a tu repositorio. Copia scripts de hooks probados en producción.
Se ejecuta antes de que se abra el editor para el mensaje del commit. Si sale con código distinto de cero, el commit se cancela inmediatamente.
#!/bin/sh
# 1. Prevenir commit de archivos .env accidentales
if git diff --cached --name-only | grep -E "(^|/).env"; then
echo "ERROR: Intento de commit de archivo .env detectado!"
echo "Elimínalo del Staging Area con: git reset HEAD .env*"
exit 1
fi
# 2. Ejecutar linter en archivos en preparación
echo "Ejecutando verificacion de codigo..."
npm run lint-staged || exit 1Recibe como parámetro la ruta del archivo temporal con el mensaje de commit. Permite validar que cumpla el formato feat:, fix:, docs:, etc.
#!/bin/sh
MSG_FILE=$1
COMMIT_MSG=$(cat "$MSG_FILE")
# Validar formato: tipo(alcance)?: descripcion
REGEX="^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([a-z0-9_-]+\))?: .+"
if ! echo "$COMMIT_MSG" | grep -qE "$REGEX"; then
echo "ERROR: Mensaje de commit invalido!"
echo "Formato requerido: feat(auth): descripcion en imperativo"
exit 1
fiSe ejecuta justo antes de transferir datos al servidor remoto con git push. Ideal para evitar romper el pipeline CI/CD en GitHub.
#!/bin/sh
echo "Ejecutando suite de pruebas antes de hacer push..."
npm test -- --bail
if [ $? -ne 0 ]; then
echo "ERROR: Pruebas fallidas. El push ha sido cancelado para proteger el repositorio remoto."
exit 1
fiEn lugar de editar manualmente .git/hooks (que no se guardan en el repositorio), los equipos modernos usan Husky para compartir hooks con todo el equipo.
# 1. Instalar Husky en tu proyecto moderno
npx husky init
# 2. Agregar hook de pre-commit para linter y secretos
echo "npx lint-staged" > .husky/pre-commit
# 3. Agregar hook para validar Conventional Commits
echo "npx --no -- commitlint --edit $1" > .husky/commit-msgGit no es magia: es un grafo acíclico dirigido (DAG) direccionable por contenido. Descubre cómo interactúan Blobs, Trees, Commits y Referencias bajo la superficie.
Un Blob solo almacena los bytes de un archivo comprimidos con zlib. No guarda el nombre del archivo, los permisos ni la fecha; solo el contenido puro indexado por su hash SHA-1.
git cat-file -p 70a34b270a34b220377e8a93da26042e9154a43c7b3992dconsole.log("Hola Mundo!");
export const API_KEY = "segura";Git tiene su propia jerga. Aquí tienes las definiciones técnicas traducidas a metáforas cotidianas para que nunca más olvides qué es cada concepto.
Puntero simbólico que hace referencia al commit más reciente en la rama actualmente seleccionada.
git show HEADEstado en el que HEAD apunta directamente a un commit específico en lugar de apuntar a una rama con nombre. Cualquier commit nuevo se perderá si cambias de rama sin crear una nueva.
git switch -c rescatar-cambios"origin" es el alias asignado por defecto al repositorio remoto que clonaste. "upstream" suele ser el alias del proyecto principal original cuando colaboras en proyectos de código abierto.
git remote -vCadena alfanumérica de 40 caracteres (o abreviada a 7) que identifica de manera única e inmutable una instantánea en el tiempo, basada en el contenido, autor y fecha.
git log --onelineEl conjunto de archivos y carpetas reales desempacados en tu sistema de archivos en los que estás trabajando actualmente.
git statusCapa intermedia donde se preparan y formatean selectivamente los cambios que formarán parte del próximo commit.
git add <archivo>Tipo de fusión en la que la rama destino no tiene commits nuevos propios, permitiendo a Git mover el puntero hacia adelante sin necesidad de crear un commit de mezcla.
git merge --ff-onlyComando que copia y aplica selectivamente los cambios de un commit específico de cualquier rama dentro de tu rama actual.
git cherry-pick <hash-del-commit>Proceso de combinar múltiples commits pequeños o de depuración en un solo commit significativo antes de fusionarlo en la rama principal.
git merge --squash <rama>Bitácora local que almacena cronológicamente todos los cambios de posición del puntero HEAD, permitiendo recuperar ramas o commits aparentemente eliminados.
git reflogPon a prueba tu intuición sobre el flujo de Git con estos 5 escenarios prácticos.
Hiciste modificaciones en "estilos.css" y ejecutaste "git add estilos.css", pero te diste cuenta de que aún no quieres incluirlo en el próximo commit.
Quieres crear una rama llamada "feat/perfil" y trasladarte a ella inmediatamente en un solo paso con la sintaxis moderna de Git.
Subiste un commit erróneo a la rama "main" en GitHub que ya fue descargado por varios compañeros de equipo.
Quieres inspeccionar qué cambios han subido tus compañeros a GitHub antes de decidir si los fusionas o no en tu código.
Acabas de hacer un commit local pero olvidaste agregar una pequeña modificación en un archivo antes de subirlo.