git push -f origin myBranch
devrait fonctionner (à condition de savoir que cela peut être dangereux si maBranch a déjà été récupérée par d'autres dans leur propre dépôt)
Depuis 2012, vous avez également :
git push --force-with-lease
(Git 1.8.5+ T3 2013) qui est plus sûr, et
git push --force-if-includes
(Git 2.30+, T1 2021), qui tente de s'assurer que ce qui est poussé de force a été créé après avoir examiné le commit à la pointe de la référence distante qui s'apprête à être remplacée de force.
Remarque : si votre dépôt distant ('origin') a sa configuration définie sur
receive.denyNonFastForwards true
cela refusera toute poussée non fast-forward (même lorsqu'elle est forcée).
Voir "Y a-t-il un moyen de configurer un dépôt git pour refuser 'git push --force'?".
L'utilisateur OP user654019 rapporte
J'ai réussi à résoudre le problème cette fois en définissant denyNonFastForwards
sur false
et en utilisant -f
pour forcer la poussée
Si l'utilisateur n'avait pas accès au dépôt, il devrait :
- réinitialiser le HEAD local à sa position d'origine (voir "Récupérer après
git reset --hard?
") :
git reset HEAD@{1}
- faire un nouveau commit qui annule votre fusion, comme décrit dans le livre ProGit, avec
git revert
:
git revert -m 1 HEAD~
(dans votre cas)
Par exemple :
$ git revert -m 1 [sha_of_C8]
Un seul commit a été annulé.
[master 88edd6d] Annuler "Merge branch 'jk/post-checkout'"
1 fichier modifié, 0 insertions(+), 2 suppressions(-)
Une discussion complète sur la façon d'annuler une fusion peut être trouvée ici.
L'idée reste de générer uniquement des commits nouveaux, y compris un annulant les changements introduits par le commit de fusion.
Vous pouvez ensuite pousser ce nouveau commit, comme un changement fast-forward.