Definir "merge malo"
Un merge malo puede significar: mergeaste el branch equivocado, resolviste conflictos incorrectamente, el merge introdujo una regresión, o mergeaste antes de completarse la review.
Caso 1: aún no pusheado
git reset --hard ORIG_HEAD
Caso 2: pusheado, otros no han hecho pull
git reset --hard ORIG_HEAD
git push --force-with-lease
Caso 3: pusheado, otros han hecho pull
git revert -m 1 <merge-sha>
Re-mergear tras un revert
git revert <revert-sha>
git checkout feature/login
git rebase main
git checkout main
git merge feature/login
Caso 4: mala resolución de conflicto
git checkout main
git commit -m "Fix conflict resolution from merge of feature/login"
Caso 5: mergeaste el branch equivocado
git reset --hard ORIG_HEAD
git merge correct-branch
Inspeccionar un merge
git log -1 --format=fuller --stat HEAD
git show -m HEAD
git diff HEAD^1 HEAD
git diff HEAD^2 HEAD
Evitar merges malos
- Siempre usa
--no-ffen branches de larga vida. - Configura CI para correr en el resultado del merge.
- Usa
git mergetoolpara conflictos complicados. - Ejecuta tests inmediatamente después de cada merge.
El kit de recuperación
ORIG_HEAD- establecido automáticamente antes de merges, resets, rebases.git reflog- registra cada movimiento de HEAD.git revert -m- deshacer un merge creando un nuevo commit.git push --force-with-lease- force push más seguro.