207 votes

Comment annuler le dernier ajout git ?

Est-il possible de déstocker la dernière modification stagée (non validée) dans le fichier git ? Supposons qu'il y ait beaucoup de fichiers dans la branche courante, certains mis à disposition, d'autres non. A un moment donné, un programmeur stupide a accidentellement exécuté :

git add -- .

...au lieu de :

git checkout -- .

Est-ce que ce programmeur peut maintenant annuler ses derniers changements avec une sorte de magie git commande ? Ou aurait-il dû s'engager avant d'expérimenter en premier lieu ?

0 votes

Heh. Nous avons obtenu une question et une réponse utiles à partir de ça.

2 votes

Duplication possible de Annuler 'git add' avant de commiter

0 votes

Je crois que ce n'est pas le double. L'OP dans l'autre question demande un moyen d'annuler cela ou de supprimer ces fichiers de la livraison. Je veux précisément et uniquement défaire les changements qui ont été ajoutés avec la dernière version de la base de données. git add surtout pour les fichiers qui avaient déjà des modifications mises à disposition, et qui avaient des modifications qui devaient être annulées et non mises à disposition. Je ne peux pas dire que l'autre question n'est pas liée.

314voto

thameera Points 1319

Vous pouvez utiliser git reset . Cela va "déstocker" tous les fichiers que vous avez ajoutés après votre dernière livraison.

Si vous voulez déstocker seulement certains fichiers, utilisez git reset -- <file 1> <file 2> <file n> .

Il est également possible d'annuler certains des changements dans les fichiers en utilisant git reset -p .

3 votes

C'est triste. Je suppose qu'il y a quelque chose qui ne va pas dans mes pratiques d'engagement après tout. J'accepte cette réponse, car vous avez mentionné -p interrupteur. Merci ! :)

0 votes

Génère (pour moi) l'erreur suivante : fatal : Failed to resolve 'HEAD' as a valid ref. Je n'ai pas encore commis quoi que ce soit (nouveau repo), j'ai juste fait git add . et je l'ai regretté. Je ne veux pas réinitialiser tout l'add, juste un répertoire. git reset -- dir/*.* génère l'erreur ci-dessus.

0 votes

... Ah, je vois ce qui se passe pour moi. Je n'avais encore rien pour HEAD vers lequel pointer et donc git reset a échoué (parce qu'il opère sur le HEAD).

45voto

knittl Points 64110

Vous ne pouvez pas annuler la dernier site git add, mais vous pouvez annuler tout add depuis la dernière livraison. git reset sans argument commit réinitialise l'index (déstocke les modifications mises en place) :

git reset

3 votes

"Vous ne pouvez pas défaire le dernier site git add" : Wow, c'est surprenant et potentiellement douloureux. Existe-t-il une source définitive pour cela ? De plus, y a-t-il une bonne raison pour qu'il en soit ainsi ? Merci !

0 votes

@AndrewMoylan : eh bien, il n'y a pas automatique manière de le faire. Vous pouvez toujours reset un seul fichier, ou utiliser reset -p pour déstabiliser un morceau spécifique.

17voto

stanm Points 170

Donc la vraie réponse à

Ce programmeur peut-il maintenant annuler ses derniers changements avec une commande git magique ?

est en fait : Non, vous ne pouvez pas déstocker juste le dernier. git add .

C'est le cas si nous interprétons la question comme dans la situation suivante :

Dossier initial :

void foo() {

}

main() {
    foo();
}

Premier changement suivi de git add :

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

Deuxième changement suivi de git add :

void foo(int bar, String baz) {
    print("$bar $baz");
}

main() {
    foo(1337, "h4x0r");
}

Dans ce cas, git reset -p ne sera pas utile, puisque sa plus petite granularité est la ligne. git ne sait pas que sur l'état intermédiaire de :

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

plus.

6voto

davids Points 3390

Vous pourriez utiliser git reset (voir docs )

6voto

Vous pouvez utiliser

git reset

pour annuler les fichiers locaux récemment ajoutés

 git reset file_name

pour annuler les changements pour un fichier spécifique

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