232 votes

Git : Suppression du fichier commit après le push

Existe-t-il une possibilité de revenir sur un fichier commit dans Git ? J'ai poussé un commit sur GitHub et ensuite je me suis rendu compte qu'il y a un fichier que je ne voulais pas pousser (je n'ai pas fini les changements).

276voto

xxor Points 23

mise à jour : ajout d'une méthode plus sûre

méthode préférée :

  1. vérifiez l'état précédent (inchangé) de votre fichier ; remarquez le double tiret

    git checkout HEAD^ -- /path/to/file
  2. le commettre :

    git commit -am "revert changes on this file, not finished with it yet"
  3. Poussez-le, aucune force n'est nécessaire :

    git push
  4. revenir à votre travail inachevé, faire à nouveau (3 fois la flèche vers le haut) :

    git checkout HEAD^ -- /path/to/file

en fait, de "désengagement" :

Pour modifier le dernier commit du HEAD du dépôt, obscurcissant votre travail poussé accidentellement, tout en entrant potentiellement en conflit avec votre collègue qui l'a peut-être déjà retiré, et qui aura des cheveux gris et perdra beaucoup de temps à essayer de réconcilier son head de branche locale avec le head central :

Pour supprimer le changement de fichier du dernier commit :

  1. pour revenir à l'état du fichier avant le dernier commit, faites :

    git checkout HEAD^ /path/to/file
  2. pour mettre à jour le dernier commit avec le fichier annulé, faites :

    git commit --amend
  3. pour pousser le commit mis à jour vers le repo, faites :

    git push -f

En réalité, envisagez d'utiliser la méthode préférentielle mentionnée précédemment.

184voto

micoru Points 1457

Si vous voulez supprimer le fichier du dépôt distant, supprimez-le d'abord de votre projet avec l'option --cache, puis poussez-le :

git rm --cached /path/to/file
git commit -am "Remove file"
git push

(Cela fonctionne même si le fichier a été ajouté au dépôt distant il y a quelques commits). N'oubliez pas d'ajouter à .gitignore les extensions de fichiers que vous ne voulez pas pousser.

63voto

Stony Points 7677

Vous pouvez rétablir un seul fichier à une révision spécifiée.

Tout d'abord, vous pouvez vérifier sur quels commits le fichier a été modifié.

git log path/to/file.txt

Ensuite, vous pouvez vérifier le fichier avec le numéro de révision.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

Après cela, vous pouvez vous engager et le pousser à nouveau.

8voto

Vous pouvez utiliser le flux de travail suivant :

git reset --soft HEAD~1
git reset HEAD /path/to/file

5voto

JB Nizet Points 250258

Remettre le fichier dans un état correct, commiter, et pousser à nouveau.

Si vous êtes sûr que personne d'autre n'a encore récupéré vos modifications, vous pouvez utiliser --amend lors du commit, pour modifier votre précédent commit (i.e. réécrire l'historique), et ensuite pousser. Je pense que vous devrez utiliser la fonction -f option lors de la poussée, pour forcer la poussée, cependant.

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