En supposant que votre branche est appelée master
ici et à distance, et que votre télécommande est appelée, origin
vous pouvez faire:
git reset --hard <commit-hash>
git push -f origin master
Cependant, vous devez éviter de le faire si quelqu'un d'autre travaille avec votre référentiel distant et a retiré vos modifications. Dans ce cas, il serait préférable de revenir sur les commits que vous ne voulez pas, puis de pousser comme d'habitude.
Mise à jour: vous avez expliqué ci-dessous que d'autres personnes ont retiré les modifications que vous avez poussées, il est donc préférable de créer un nouveau commit qui annule toutes ces modifications . Il y a une belle explication de vos options pour ce faire dans cette réponse de Jakub Narębski . La méthode la plus pratique dépend du nombre de validations que vous souhaitez annuler et de la méthode qui vous convient le mieux.
Depuis votre question, il est clair que vous avez déjà utilisé git reset --hard
pour réinitialiser votre master
branche, vous devrez peut-être commencer par utiliser git reset --hard ORIG_HEAD
pour ramener votre branche à son emplacement précédent. (Comme toujours avec git reset --hard
, assurez-vous que git status
c'est propre, que vous êtes sur la bonne branche et que vous êtes git reflog
un outil pour récupérer des ORIG_HEAD
validations apparemment perdues.) Vous devriez également vérifier que cela pointe vers la bonne validation, avec git show ORIG_HEAD
.
Dépannage:
Si vous obtenez un message du type " ! [Rejeté à distance] a60f7d85 -> maître (crochet de pré-réception refusé) "
vous devez alors autoriser la réécriture de l'historique des branches pour la branche spécifique. Dans BitBucket, par exemple, il est dit "La réécriture de l'historique des branches n'est pas autorisée". Il y a une case à cocher nommée Allow rewriting branch history
que vous devez cocher.
origin/master
n'a pas été tiré et poussé par d'autres utilisateurs? La modification de l'historique d'un référentiel public (c'est-à-dire non local) est quelque chose que vous souhaitez éviter à tout moment.