J'ai accidentellement commis les mauvais fichiers sur [Git][1], mais je n'ai pas encore poussé le commit sur le serveur.
Comment puis-je annuler ces livraisons à partir du référentiel local ?
$ git commit -m "Something terribly misguided" # (1)
$ git reset HEAD~ # (2)
<< edit files as necessary >> # (3)
$ git add ... # (4)
$ git commit -c ORIG_HEAD # (5)
git status
, donc vous devrez les ajouter à nouveau avant de commiter). Si vous voulez seulement ajouter des changements au commit précédent, ou changer le message de commit1, vous pouvez utiliser git reset --soft HEAD~
à la place, ce qui est comme git reset HEAD~
2 mais laisse vos changements existants indexés.git add
tout ce que vous voulez inclure dans votre nouveau commit.reset
a copié l'ancien head dans .git/ORIG_HEAD
; commit
avec -c ORIG_HEAD
ouvrira un éditeur, qui contient initialement le message de log de l'ancien commit et vous permet de le modifier. Si vous n'avez pas besoin de modifier le message, vous pouvez utiliser l'option -C
.Attention cependant, si vous avez ajouté de nouveaux changements à l'index, utiliser commit --amend
les ajoutera à votre précédent commit.
[2] : https://git-scm.com/docs/git-reset
Si le code est déjà poussé sur votre serveur et que vous avez les permissions d'écraser l'historique (rebase) alors :
git push origin master --force
Vous pouvez également consulter cette réponse :
La réponse ci-dessus vous montrera git reflog
qui est utilisé pour trouver quel est le SHA-1 auquel vous souhaitez revenir. Une fois que vous avez trouvé le point sur lequel vous souhaitez annuler, utilisez la séquence de commandes expliquée ci-dessus.
1 Notez cependant que vous n'avez pas besoin de revenir à un commit antérieur si vous avez juste fait une erreur dans votre message de commit. L'option la plus simple est de git reset
(pour annuler tous les changements que vous avez faits depuis) et ensuite git commit --amend
, ce qui ouvrira votre éditeur de messages de commit par défaut pré-rempli avec le dernier message de commit.
2 HEAD~
est le même que HEAD~1
Ajoutez/supprimez des fichiers pour obtenir les choses comme vous le souhaitez :
git rm classdir
git add sourcedir
Puis modifiez le commit :
git commit --amend
Le commit précédent, erroné, sera modifié pour refléter le nouvel état de l'index - en d'autres termes, ce sera comme si vous n'aviez jamais fait d'erreur en premier lieu.
Notez que vous ne devriez faire ceci que si vous n'avez pas encore poussé. Si vous avez poussé, il vous suffit de commiter une correction normalement.
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
ou
git reset --hard HEAD~1
Avertissement : La commande ci-dessus supprimera définitivement les modifications des fichiers .java
(et tout autre fichier) que vous vouliez commettre.
Le hard reset
à HEAD-1
remettra votre copie de travail à l'état de la livraison avant votre mauvaise livraison.