Publicado en

Git: flujo completo con ejemplos reales

Flujo Git completo con comandos switch, add, commit, push y merge sobre fondo oscuro

El flujo de trabajo Git que se usa en equipos reales, de principio a fin: crear rama, hacer commits, abrir un pull request y fusionar limpiamente.

Configuración inicial (una vez)

git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
git config --global init.defaultBranch main
git config --global pull.rebase false    # merge al hacer pull
git config --list                        # verificar configuración

Empezar un proyecto

# Repositorio nuevo
git init
git add .
git commit -m "feat: commit inicial"
git remote add origin git@github.com:usuario/repo.git
git push -u origin main

# Clonar repositorio existente
git clone git@github.com:usuario/repo.git
git clone git@github.com:usuario/repo.git mi-carpeta  # con nombre personalizado

Flujo diario: rama → commit → push

# 1. Asegurarte de partir de main actualizado
git switch main
git pull origin main

# 2. Crear rama para la tarea
git switch -c feature/login-con-google
# o la nomenclatura del equipo: fix/bug-123, chore/actualizar-deps, etc.

# 3. Trabajar: hacer cambios, añadir, commitear
git status                          # ver estado del repositorio
git diff                            # ver cambios no añadidos
git diff --staged                   # ver cambios ya añadidos

git add archivo.ts                  # añadir archivo concreto
git add src/                        # añadir directorio
git add -p                          # añadir cambios por fragmentos (recomendado)
git add .                           # añadir todo (usar con cuidado)

git commit -m "feat: añadir login con Google OAuth"
# Convención de commits: feat / fix / chore / docs / refactor / test / style

# Commits adicionales en la misma rama
git add src/auth/google.ts
git commit -m "feat: añadir callback handler para OAuth"

# 4. Subir la rama al remoto
git push origin feature/login-con-google
git push -u origin feature/login-con-google  # -u para trackear automáticamente

Pull Request y review

# Mantener la rama actualizada con main durante la review
git fetch origin
git rebase origin/main    # rebase sobre main actualizado (alternativa a merge)
# o
git merge origin/main     # merge de main en la rama feature

# Si hay conflictos
git status                # ver archivos en conflicto
# editar los archivos, resolver los marcadores <<<< ==== >>>>
git add archivo-resuelto.ts
git rebase --continue     # si estabas en rebase
git commit                # si estabas en merge

# Actualizar el PR
git push origin feature/login-con-google
git push --force-with-lease  # si hiciste rebase (no force a secas)

Después del merge: limpiar

# Volver a main y actualizar
git switch main
git pull origin main

# Eliminar la rama local (ya está en main)
git branch -d feature/login-con-google

# Eliminar la rama remota (si no lo hizo GitHub automáticamente)
git push origin --delete feature/login-con-google

# Ver ramas locales
git branch
# Ver ramas remotas
git branch -r
# Limpiar referencias a ramas remotas ya eliminadas
git remote prune origin

Deshacer cosas

# Deshacer cambios en el working tree (no staged)
git restore archivo.ts

# Deshacer git add (sacar del stage)
git restore --staged archivo.ts

# Modificar el último commit (mensaje o añadir archivo olvidado)
git add archivo-olvidado.ts
git commit --amend --no-edit        # mismos cambios, mantiene el mensaje
git commit --amend -m "nuevo mensaje"
# Solo seguro si aún no has hecho push

# Deshacer el último commit pero mantener los cambios
git reset HEAD~1                    # soft: cambios quedan en stage
git reset --mixed HEAD~1            # mixed (default): en working tree
git reset --hard HEAD~1             # hard: DESCARTA los cambios

# Revertir un commit ya publicado (crea commit inverso)
git revert abc1234
git revert HEAD~2..HEAD             # revertir los últimos 2 commits

Inspeccionar el historial

git log                             # historial completo
git log --oneline                   # una línea por commit
git log --oneline --graph           # con árbol de ramas
git log --oneline -10               # últimos 10 commits
git log --author="Yassin" --since="1 week ago"
git log -- archivo.ts               # historial de un archivo

git show abc1234                    # ver un commit concreto
git diff main..feature/mi-rama      # diferencias entre ramas
git blame archivo.ts                # ver quién escribió cada línea

Stash: guardar cambios temporalmente

git stash                           # guardar cambios sin commitear
git stash push -m "WIP: login form"  # con mensaje descriptivo
git stash list                      # ver todos los stashes
git stash pop                       # aplicar el último y eliminarlo
git stash apply stash@{1}           # aplicar uno concreto sin eliminarlo
git stash drop stash@{1}            # eliminar uno concreto
git stash clear                     # eliminar todos