J'ai un serveur Web qui sert un projet qui est un référentiel Git. Lorsque je modifie le code, je tire un git du serveur. Parfois, le nouveau code se bloque, je voudrais pouvoir revenir au dernier tirage, celui qui précède. Je veux faire cela avec un script, sans avoir à chercher quel est le dernier sha. Comment puis je faire ça?
Edit: Juste pour clarifier, je veux juste faire une action, comme appuyer sur un bouton qui dit "oups! Ce dernier pull que je viens de faire était une erreur, j'aimerais bien ne pas avoir fait ça". Je ne veux pas être obligé de chercher sha ou des balises ou quoi que ce soit d'autre dans cette situation, c'est plutôt une fonction "annuler" ... Le serveur doit apporter les dernières modifications.
git reset --hard HEAD^1
vous ramènera un commit de ce que vous avez tiré. Si vous souhaitez rétablir l'état dans lequel il se trouvait avant l'extraction, utilisez git reset --hard HEAD@{1}
. Le @{1}
suit où se trouvait la tête avant la dernière opération qui l'a modifiée dans votre dépôt local. Ainsi, plusieurs commits sont remontés si plusieurs ont été poussés avant que vous n'ayez tiré. Voir aussi git reflog
pour afficher la liste complète.
Dans ce cas, il peut être judicieux d’utiliser une branche, qui peut être facilement supprimée ou fusionnée en cas d’échec ou de succès. Cela vous aidera à garder une trace de ce qui est nouveau et à rendre les choses plus propres si vous avez des cas plus compliqués que "simplement supprimer le dernier commit" (d'autant plus que vous voulez le faire avec un script). Donc sur votre serveur:
git fetch --all # fetch new commits from remote
git checkout -b testing # create and switch to branch 'testing'
git merge Origin/master # merge new commits from remote branch master
# (in branch 'testing')
... alors testez des choses ... si succès:
git checkout master # switch back to master
git merge testing
et en cas d'échec:
git checkout master
git branch -D testing # remove testing branch
Mais de toute façon ... Votre seul but est de supprimer le dernier commit, vous pouvez utiliser git reset
comme l'a souligné Josh.
git reset HEAD^
devrait vous amener au commit précédent. Voir ici pour plus d'informations.
Il y a un autre moyen de se défaire du dernier tirage
git reset --keep HEAD@{1}
La réponse acceptée par @Karl Bielefeldt n'a pas fonctionné exactement pour moi. J'utilise GIT version 2.10.0.windows.1 Peut-être que cela a fonctionné pour les versions antérieures. Je reçois une erreur "unknown switch 'e" ". Enfin, j'ai apporté quelques modifications et cela a fonctionné.
Voici les étapes à suivre pour revenir avant le tirage précédent:
git reflog
pour voir la liste mentionnée par Karl.git reset --hard <commit version>
Une autre façon de faire consiste à utiliser des balises. Si vous pensez pouvoir étiqueter votre HEAD avec un numéro de version avant le tirage, faites le tirage, puis si vous avez besoin de restaurer le HEAD, vous pouvez le faire git reset {tag name}
De cette façon, si le tirage a plusieurs commits vous pouvez revenir à l'endroit où vous vous trouviez avant la fusion.