Réinitialisation de la télécommande à un certain engagement

Je veux supprimer tous les changements effectués après le commit <commit-hash> . C'est ce que j'ai fait :

git reset --hard <commit-hash>

Maintenant je veux faire la même chose avec ma télécommande. Comment puis-je le faire ? J'ai fait quelques commits (et pushes) après <commit-hash> et je veux juste les supprimer tous. C'est juste que quelque chose s'est trop mal passé en cours de route et je ne veux pas que ce soit pire que ça ne l'est déjà. ;(

Je veux essentiellement remonter mon origin/master jusqu'à <commit-hash>.

Solution

En supposant que votre branche s'appelle master à la fois ici et à distance, et que votre branche distante s'appelle origin, vous pourriez faire :

 git reset --hard 
 git push -f origin master

Cependant, vous devriez éviter de faire cela si quelqu'un d'autre travaille avec votre dépôt distant et a récupéré vos modifications. Dans ce cas, il serait préférable de revert les commits que vous ne voulez pas, puis de pousser normalement.

Mise à jour : vous avez expliqué ci-dessous que d'autres personnes ont retiré les modifications que vous avez poussées, et qu'il est donc préférable de créer un nouveau commit qui annule toutes ces modifications. Il y a une bonne explication de vos options pour faire cela dans [cette réponse de Jakub Narębski**] (https://stackoverflow.com/questions/1463340/revert-multiple-git-commits/1470452#1470452). Le choix de la méthode la plus pratique dépend du nombre de commits que vous voulez inverser et de la méthode qui vous semble la plus logique.

Puisque d'après votre question, il est clair que vous avez déjà utilisé git reset --hard pour réinitialiser votre branche master, vous devrez peut-être commencer par utiliser git reset --hard ORIG_HEAD pour remettre votre branche là où elle était avant. (Comme toujours avec git reset --hard, assurez-vous que git status est propre, que vous'êtes sur la bonne branche et que vous'connaissez git reflog comme outil pour récupérer les commits apparemment perdus). Vous devriez également vérifier que ORIG_HEAD pointe vers le bon commit, avec git show ORIG_HEAD.

Dépannage:

Si vous obtenez un message comme " ! [remote rejected] a60f7d85 -> master (pre-receive hook declined)&quot ;

alors vous devez autoriser la réécriture de l'historique de la branche pour cette branche spécifique. Dans BitBucket par exemple, il est dit "La réécriture de l'historique des branches n'est pas autorisée&quot ;. Il y a une case à cocher nommée Autoriser la réécriture de l'historique des branches que vous devez cocher.

Commentaires (12)

Utilisez les autres réponses si cela ne vous dérange pas de perdre les modifications locales Cette méthode peut tout de même détruire votre système distant si vous choisissez le mauvais hash de validation pour revenir en arrière.

Si vous voulez simplement que la version distante corresponde à un commit qui se trouve déjà dans votre branche locale :

  1. Ne pas faire de réinitialisation.

  2. Utilisez git log pour trouver le hash du commit que vous voulez faire correspondre au distant. git log -p pour voir les changements, ou git log --graph --all --oneline --decorate pour voir un arbre compact. (Avoir cette dernière option comme alias dans votre shell est très pratique).

  3. Copier le hachage.

  4. Exécutez une commande comme :

     git push --force  :

    par exemple.

     git push --force origine 606fdfaa33af1844c86f4267a136d4666e576cdc:master
Commentaires (11)

J'ai résolu un problème comme le vôtre par cette commande :

git reset --hard  
git push -f  : 
Commentaires (0)