84 votes

Comment faire en sorte qu'un commit plus ancien devienne HEAD ?

J'ai réalisé que j'avais fait des erreurs sur HEAD, j'ai consulté un commit plus ancien et j'ai commencé à coder à partir de là. Lorsque je tente un push, on me dit que mon commit actuel est en retard et que je dois fusionner avec HEAD. Git recommande "git pull". Cependant, HEAD contient le code que je veux ignorer. Comment résoudre ce problème ?

Organigramme :

-------- HEAD (bad) ---------------------- + (behind conflict, requires
     \                                    /   merge with HEAD, which is
      \------- Current commit (good) ----/    bad and needs to be ignored)

4voto

LemonadeGrenade Points 41

Pour ceux d'entre nous qui travaillent sur des branches protégées, push -f n'est pas une option.

Au lieu de cela :

Checkout HEAD
diff {hash of desired commit to use as new HEAD} > myChange.patch
git apply 
commit 
push

Si vous avez des changements que vous aimeriez fusionner dans la nouvelle version de HEAD comme OP, je les sauvegarderais d'abord, corrigerais le repo distant, puis appliquerais les changements.

Cela permet également de conserver l'historique de votre repo.

3voto

Johan Swanepoel Points 138

Je suis un peu en retard à la fête - je devais le faire :

git push -f origin HEAD:<name-of-branch>

Veuillez lire la documentation avant d'exécuter cette commande.

2voto

Anil M Points 139

Les étapes qui ont parfaitement fonctionné pour moi sont les suivantes --

1) git log --oneline

2) Récupérez le commit que vous souhaitez annuler (très probablement le commit avant votre dernier commit à HEAD et push)

3) git checkout (il s'agit de l'identifiant du commit auquel vous souhaitez que votre travail revienne)

4) git push -f origin HEAD:master (-f forcera le push en annulant tout rejet qui se produirait si la branche poussée était derrière la branche distante) HEAD:master(Cela permet de s'assurer que le rollback est bien poussé sur la branche master et à HEAD du repo distant)

5) C'est tout :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X