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.

4voto

theGiallo Points 144

À date git vous invite :

  1. use "git rm --cached <file>..." to unstage si les fichiers n'étaient pas dans le repo. Il déstocke les fichiers en les gardant là.
  2. use "git reset HEAD <file>..." to unstage si les fichiers étaient dans le repo, et que vous les ajoutez tels que modifiés. Il conserve les fichiers tels qu'ils sont, et les déstocke.

A ma connaissance, vous ne pouvez pas défaire le git add -- mais vous pouvez déstocker une liste de fichiers comme mentionné ci-dessus.

2voto

Faisal Points 2586
  • Supprimez le fichier de l'index, mais gardez-le versionné et laissez les changements non engagés dans la copie de travail :

    git reset head <file>
  • Réinitialise le fichier au dernier état de HEAD, en annulant les modifications et en les supprimant de l'index :

    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>

    Ceci est nécessaire car git reset --hard HEAD ne fonctionnera pas avec les fichiers uniques.

  • Retirer <file> de l'index et du versioning, en gardant le fichier non versionné avec les changements dans la copie de travail :

    git rm --cached <file>
  • Retirer <file> de la copie de travail et du versioning complètement :

    git rm <file>

2voto

BSB Points 1175

Si vous voulez supprimer tous les fichiers ajoutés de git pour le commit

git reset

Si vous voulez supprimer un fichier individuel

git rm <file>

0voto

Philip Oakley Points 3825

En fonction de la taille et de l'ampleur de la difficulté, vous pouvez créer une branche temporaire (scratch) et y livrer le travail en cours.

Ensuite, basculez vers votre branche d'origine et récupérez les fichiers appropriés à partir du commit scratch.

Au moins, vous auriez un enregistrement permanent de l'état actuel et de l'état précédent pour travailler (jusqu'à ce que vous supprimiez la branche scratch).

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