Réponses:
Vous pouvez utiliser git revert <commit>…
pour tous les n commits, puis pousser comme d'habitude, en gardant l'historique inchangé.
Ou vous pouvez "revenir en arrière" avec git reset --hard HEAD~n
. Si vous poussez dans un référentiel public ou partagé, vous pouvez diverger et interrompre le travail des autres en fonction de votre branche d'origine. Git vous empêchera de le faire, mais vous pouvez l'utiliser git push -f
pour forcer la mise à jour.
revert
entraînera la fusion de vos branches de fonctionnalités comme "déjà" fusionnées. C'est parce que ces branches sont en train d'être fusionnées. Mais les changements ont été annulés. Solution: choisissez Cherry ou annulez la validation de retour .
reset --hard
également que les branches de fonctionnalités sont traitées comme déjà fusionnées? Mon hypothèse est que ce ne serait pas (où le revert
ferait).
elmarco a raison ... sa suggestion est la meilleure pour les référentiels partagés / publics (ou, au moins, les branches publiques). S'il n'a pas été partagé (ou si vous êtes prêt à perturber les autres), vous pouvez également pousser une référence particulière:
git push origin old_master:master
Ou, s'il y a un commit SHA1 particulier (disons 1e4f99e sous forme abrégée), vous souhaitez revenir:
git push origin 1e4f99e:master
Heureusement, j'étais en mesure d'utiliser la solution de Pat Notz qui a complètement supprimé le commit indésirable. Cependant, au départ, j'ai eu l'erreur
error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*
Mais l'ajout de l' -f
option force ( ) écrase cette erreur
git push -f origin 52e36b294e:master
Si vous avez un accès direct au référentiel distant, vous pouvez toujours utiliser:
git reset --soft <sha1>
Cela fonctionne car il n'y a aucune tentative de modifier le répertoire de travail inexistant. Pour plus de détails, veuillez consulter la réponse originale:
Comment puis-je annuler la validation du dernier commit dans un dépôt nu git?
git reset --hard [sha1]
où sha1 est l'identificateur de hachage de validation.