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 developCommits Semánticos
# Formato
():
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 commitCherry 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
fiAlias Ú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 visualSubmodules
# 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-featureBisect 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.jsonGitHub 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 456Mejores Prácticas
- Commits pequeños y frecuentes: Más fácil de revisar
- Mensajes descriptivos: Usa conventional commits
- Branch por feature: Aísla cambios
- Pull antes de push: Evita conflictos
- Code review: Siempre usa PRs
- Protege main: Requiere PRs y reviews
- 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.