Guía Rápida de Comandos Esenciales de Git y GitHub
Esta guía reúne los comandos fundamentales organizados por flujo de trabajo, desde la configuración inicial hasta la resolución de problemas cotidianos.
1. Configuración Inicial y Autenticación
Configura tu identidad global (se aplica a todos los repositorios):
# Definir tu nombre de usuario y correo
git config --global user.name "Tu Nombre"
git config --global user.email "tu_correo@ejemplo.com"
# Definir 'main' como rama por defecto para nuevos repositorios
git config --global init.defaultBranch main
# Ver todas las configuraciones activas
git config --list
2. Iniciar y Clonar Repositorios
# Iniciar un repositorio local en la carpeta actual
git init
# Clonar un repositorio existente desde GitHub (vía SSH o HTTPS)
git clone git@github.com:usuario/repositorio.git
3. Flujo Diario de Trabajo (Stage & Commit)
El ciclo básico para guardar cambios:
# Ver el estado del árbol de trabajo (archivos modificados, staged o untracked)
git status
# Ver diferencias en archivos antes de agregarlos al stage
git diff
# Agregar un archivo específico al área de preparación (stage)
git add archivo.ext
# Agregar todos los cambios (modificados, nuevos y eliminados)
git add .
# Crear un commit con un mensaje descriptivo
git commit -m "tipo: descripción clara del cambio"
# Modificar el último commit (añadir cambios olvidados o corregir el mensaje)
git commit --amend -m "Nuevo mensaje corregido"
4. Gestión de Ramas (Branches)
Trabajar con ramas independientes para features, fixes o refactorizaciones:
# Listar ramas locales (* indica la rama actual)
git branch
# Listar ramas locales y remotas
git branch -a
# Listar ramas remotas conocidas
git branch -r
# Crear una nueva rama sin cambiar a ella
git branch nombre-rama
# Crear una nueva rama y cambiar a ella inmediatamente
git checkout -b nombre-rama
# O con la sintaxis moderna:
git switch -c nombre-rama
# Cambiar entre ramas existentes
git checkout nombre-rama
# O con la sintaxis moderna:
git switch nombre-rama
# Renombrar la rama actual (por ejemplo, de master a main)
git branch -M main
# Eliminar una rama local (que ya fue fusionada)
git branch -d nombre-rama
# Forzar la eliminación de una rama local (con cambios sin fusionar)
git branch -D nombre-rama
5. Sincronización con GitHub (Remote, Push & Pull)
# Ver las URLs remotas vinculadas
git remote -v
# Conectar un repositorio local con un remoto en GitHub
git remote add origin git@github.com:usuario/repositorio.git
# Cambiar la URL de un remoto existente
git remote set-url origin git@github.com:usuario/repositorio.git
# Subir una rama por primera vez y configurar el upstream tracking (-u)
git push -u origin main
# Subir commits posteriores de la rama actual ya trackeada
git push
# Descargar e integrar los cambios del remoto en tu rama actual
git pull origin main
# Descargar cambios e historial del remoto SIN fusionar automáticamente
git fetch origin
# Limpiar referencias locales de ramas remotas que ya fueron eliminadas en GitHub
git fetch --prune
6. Fusión (Merge) e Integración de Cambios
Para pasar los cambios de una rama feature a main:
# 1. Posicionarse en la rama destino
git checkout main
# 2. Asegurarse de tener la última versión del remoto
git pull origin main
# 3. Fusionar la rama con los cambios
git merge feature
# 4. Subir el resultado a GitHub
git push origin main
7. Inspección e Historial
# Ver historial de commits detallado
git log
# Ver historial condensado en una sola línea por commit
git log --oneline
# Ver historial con representación gráfica de ramas y fusiones
git log --oneline --graph --decorate --all
# Ver quién modificó cada línea de un archivo y en qué commit
git blame archivo.ext
8. Guardado Temporal (Stash)
Guarda cambios sin commitear para trabajar en otra tarea urgente:
# Guardar cambios actuales en un stash temporal
git stash
# Guardar con un mensaje identificador
git stash save "WIP: trabajo a medio terminar"
# Listar stashes guardados
git stash list
# Recuperar los cambios del último stash y eliminarlo de la lista
git stash pop
# Recuperar los cambios manteniendo el stash guardado
git stash apply
# Descartar todos los cambios guardados en stash
git stash clear
9. Deshacer Cambios y Recuperación
# Descartar cambios en un archivo específico del directorio de trabajo
git restore archivo.ext
# Quitar un archivo del stage (deshacer git add) sin perder las modificaciones
git restore --staged archivo.ext
# Deshacer el último commit manteniendo los archivos en stage
git reset --soft HEAD~1
# Deshacer el último commit manteniendo los cambios como no preparados
git reset --mixed HEAD~1
# ¡CUIDADO! Descartar por completo los cambios y volver al último commit
git reset --hard HEAD
# Crear un nuevo commit que invierte exactamente los cambios de un commit previo (seguro para ramas compartidas)
git revert <hash-del-commit>
# Historial de todos los movimientos de HEAD (muy útil para recuperar commits "perdidos")
git reflog