Git: Workflow Profesional y Mejores Prácticas

23 de diciembre de 2025
Osman Jimenez
Git Control de Versiones DevOps

Dominando Git en Equipos

Git es esencial para el desarrollo moderno. Aprende workflows profesionales y comandos avanzados para trabajar efectivamente en equipo.

Git Flow

# Branches principales
main (producción)
develop (desarrollo)

# Branches de soporte
feature/* (nuevas features)
hotfix/* (fixes urgentes)
release/* (preparar release)

# Crear feature
git checkout -b feature/nueva-funcionalidad develop

# Finalizar feature
git checkout develop
git merge --no-ff feature/nueva-funcionalidad
git branch -d feature/nueva-funcionalidad
git push origin develop

Commits Semánticos

# Formato
(): 



# Tipos feat: Nueva funcionalidad fix: Bug fix docs: Documentación style: Formato (no afecta código) refactor: Refactorización test: Tests chore: Mantenimiento # Ejemplos git commit -m "feat(auth): add JWT authentication" git commit -m "fix(api): resolve CORS issue" git commit -m "docs(readme): update installation steps"

Comandos Esenciales

# Status y diff
git status
git diff
git diff --staged
git diff branch1..branch2

# Log
git log --oneline --graph --all
git log --author="John"
git log --since="2 weeks ago"
git log --grep="fix"

# Stash
git stash
git stash list
git stash pop
git stash apply stash@{0}
git stash drop

# Reset y Revert
git reset --soft HEAD~1  # Mantiene cambios staged
git reset --mixed HEAD~1 # Mantiene cambios unstaged
git reset --hard HEAD~1  # Descarta cambios
git revert       # Crea nuevo commit que revierte

Rebase Interactivo

# Reescribir últimos 3 commits
git rebase -i HEAD~3

# En el editor:
pick abc123 feat: add login
squash def456 fix: typo
reword ghi789 feat: add logout

# Comandos disponibles:
# pick = usar commit
# reword = cambiar mensaje
# edit = editar commit
# squash = combinar con anterior
# fixup = como squash pero descarta mensaje
# drop = eliminar commit

Cherry Pick

# Aplicar commit específico de otra branch
git cherry-pick 

# Múltiples commits
git cherry-pick  

# Rango de commits
git cherry-pick ^..

Resolución de Conflictos

# Durante merge/rebase
<<<<<<< HEAD
Código actual
=======
Código entrante
>>>>>>> feature-branch

# Resolver
# 1. Editar archivo manualmente
# 2. Marcar como resuelto
git add 
git commit

# O abortar
git merge --abort
git rebase --abort

# Herramientas
git mergetool
git diff --ours
git diff --theirs

Hooks

# .git/hooks/pre-commit
#!/bin/sh
npm run lint
npm run test

if [ $? -ne 0 ]; then
  echo "Tests failed. Commit aborted."
  exit 1
fi

# .git/hooks/commit-msg
#!/bin/sh
commit_msg=$(cat $1)
pattern="^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+"

if ! echo "$commit_msg" | grep -qE "$pattern"; then
  echo "Invalid commit message format"
  exit 1
fi

Alias Útiles

# .gitconfig
[alias]
  st = status
  co = checkout
  br = branch
  ci = commit
  unstage = reset HEAD --
  last = log -1 HEAD
  visual = log --oneline --graph --all --decorate
  amend = commit --amend --no-edit
  undo = reset --soft HEAD~1
  
# Uso
git st
git visual

Submodules

# Agregar submodule
git submodule add https://github.com/user/repo.git path/to/submodule

# Clonar con submodules
git clone --recursive 

# Actualizar submodules
git submodule update --init --recursive
git submodule update --remote

# Eliminar submodule
git submodule deinit path/to/submodule
git rm path/to/submodule

Worktrees

# Trabajar en múltiples branches simultáneamente
git worktree add ../project-feature feature/nueva-funcionalidad
git worktree add ../project-hotfix hotfix/bug-critico

# Listar worktrees
git worktree list

# Eliminar worktree
git worktree remove ../project-feature

Bisect para Debugging

# Encontrar commit que introdujo bug
git bisect start
git bisect bad                 # Commit actual tiene bug
git bisect good   # Commit que funcionaba

# Git hace checkout de commits intermedios
# Probar y marcar
git bisect good  # Si funciona
git bisect bad   # Si tiene bug

# Git encuentra el commit culpable
git bisect reset  # Volver a HEAD

.gitignore Efectivo

# Node.js
node_modules/
npm-debug.log
.env
.env.local

# IDEs
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Build
dist/
build/
*.log

# Ignorar todo excepto
*
!src/
!package.json

GitHub CLI

# Instalar: gh

# Crear PR
gh pr create --title "Nueva feature" --body "Descripción"

# Ver PRs
gh pr list
gh pr view 123

# Checkout PR
gh pr checkout 123

# Merge PR
gh pr merge 123 --squash

# Issues
gh issue create
gh issue list
gh issue close 456

Mejores Prácticas

  1. Commits pequeños y frecuentes: Más fácil de revisar
  2. Mensajes descriptivos: Usa conventional commits
  3. Branch por feature: Aísla cambios
  4. Pull antes de push: Evita conflictos
  5. Code review: Siempre usa PRs
  6. Protege main: Requiere PRs y reviews
  7. CI/CD: Tests automáticos en PRs

Conclusión

Dominar Git es esencial para cualquier desarrollador. Estos workflows y comandos te ayudarán a trabajar más efectivamente en equipo y mantener un historial limpio y útil.