Definire "merge cattivo"
Un merge cattivo puo significare: hai mergato il branch sbagliato, hai risolto male i conflitti, il merge ha introdotto una regressione.
Caso 1: non ancora pushato
git reset --hard ORIG_HEAD
Caso 2: pushato, altri non hanno fatto pull
git reset --hard ORIG_HEAD
git push --force-with-lease
Caso 3: pushato, altri hanno fatto pull
git revert -m 1 <merge-sha>
Re-mergare dopo un revert
git revert <revert-sha>
git checkout feature/login
git rebase main
git checkout main
git merge feature/login
Caso 4: cattiva risoluzione conflitti
git checkout main
git commit -m "Fix conflict resolution from merge of feature/login"
Caso 5: mergato il branch sbagliato
git reset --hard ORIG_HEAD
git merge correct-branch
Ispezionare un merge
git log -1 --format=fuller --stat HEAD
git show -m HEAD
git diff HEAD^1 HEAD
git diff HEAD^2 HEAD
Evitare merge cattivi
- Usare sempre
--no-ffsui branch di lunga durata. - Configurare CI per girare sul risultato del merge.
- Usare
git mergetool. - Eseguire test immediatamente dopo ogni merge.
Il toolkit di recupero
ORIG_HEAD.git reflog.git revert -m.git push --force-with-lease.