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):

bash
# 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

bash
# 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:

bash
# 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:

bash
# 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)

bash
# 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:

bash
# 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

bash
# 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:

bash
# 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

bash
# 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