Question Supprimer les fichiers du commit Git


J'utilise Git et j'ai commis quelques fichiers en utilisant

git commit -a

Plus tard, j'ai trouvé qu'un fichier avait été ajouté par erreur au commit.

Comment puis-je supprimer un fichier de la dernière validation?


1091
2017-09-18 16:59


origine


Réponses:


Je pense que d'autres réponses sont fausses, car il s'agit de déplacer les fichiers commis par erreur vers la zone de transfert à partir de la validation précédente, sans annuler les modifications qui leur ont été apportées. Cela peut être fait comme l'a suggéré Paritosh Singh:

git reset --soft HEAD^ 

ou

git reset --soft HEAD~1

Puis réinitialisez les fichiers indésirables afin de les laisser à l'écart du commit:

git reset HEAD path/to/unwanted_file

Maintenant, commettez à nouveau, vous pouvez même réutiliser le même message de commit:

git commit -c ORIG_HEAD  

2096
2018-03-10 10:56



ATTENTION! Si vous voulez seulement supprimer un fichier de votre commit précédent, et le garder sur le disque, lis La réponse de juzzlin juste au dessus.

Si c'est votre dernier commit et que vous voulez supprimez complètement le fichier de votre référentiel local et distant, vous pouvez:

  1. supprimer le fichier git rm <file>
  2. commettre avec modifier le drapeau: git commit --amend

L'indicateur de modification dit à git de commettre à nouveau, mais "fusionne" (pas dans le sens de fusionner deux branches) ce commit avec le dernier commit.

Comme indiqué dans les commentaires, en utilisant git rm voici comme utiliser le rm commander lui-même!


217
2017-09-18 17:22



Les réponses existantes parlent toutes de supprimer les fichiers indésirables de la dernier commettre.

Si vous souhaitez supprimer les fichiers indésirables d'un vieux commit (même poussé) et ne veut pas créer un nouveau commit, ce qui est inutile, à cause de l'action:

1.

Recherchez le commit auquel vous voulez que le fichier se conforme.

git checkout <commit_id> <path_to_file>

vous pouvez le faire plusieurs fois si vous voulez supprimer beaucoup de fichiers.

2.

git commit -am "remove unwanted files"

3.

Trouver le commit_id du commit sur lequel les fichiers ont été ajoutés par erreur, disons "35c23c2" ici

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

Cette commande ouvre l'éditeur en fonction de vos paramètres. Celui par défaut est vim.

Déplacer la dernière validation, qui devrait être "supprimer les fichiers indésirables", à la ligne suivante de la validation incorrecte ("35c23c2" dans notre cas), et définir la commande comme fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

Vous devriez être bon après avoir enregistré le fichier.

Pour finir :

git push -f

Si vous avez malheureusement des conflits, vous devez les résoudre manuellement.


106
2018-01-27 15:24



Comme l'indique la réponse acceptée, vous pouvez le faire en réinitialisant le commit entier. Mais c'est une approche plutôt lourde.
Une façon plus simple de le faire serait de garder le commit, et simplement de supprimer les fichiers modifiés.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

le git reset prendra le fichier tel qu'il était dans le commit précédent, et le mettra dans l'index. Le fichier dans le répertoire de travail est intact.
le git commit va alors commettre et écraser l'index dans le commit actuel.

Cela prend essentiellement la version du fichier qui était dans la validation précédente et l'ajoute à la validation en cours. Cela n'entraîne aucune modification nette et le fichier est effectivement supprimé de la validation.


60
2018-02-25 00:06



Si vous n'avez pas activé les modifications sur le serveur, vous pouvez utiliser

git reset --soft HEAD~1

Il réinitialisera tous les changements et reviendra à un commit de retour

Si vous avez activé vos modifications, suivez les étapes indiquées par @CharlesB


35
2017-09-18 18:28



Supprimer le fichier en utilisant rm le supprimera!

Vous ajoutez toujours un commit à git plutôt que de le supprimer, donc dans ce cas retournez le fichier à l'état dans lequel il se trouvait avant la première validation (ceci peut être une action delete 'rm' si le fichier est nouveau) et ensuite re-commettre et le fichier ira.

Pour retourner le fichier à un état antérieur:

    git checkout <commit_id> <path_to_file>

ou pour le renvoyer à l'état à la tête éloignée:

    git checkout origin/master <path_to_file>

puis modifiez le commit et vous devriez trouver le fichier a disparu de la liste (et non supprimé de votre disque!)


34
2018-01-28 14:00



git checkout HEAD~ path/to/file
git commit --amend

32
2017-08-23 19:01



Ce qui suit va désactiver le fichier que vous vouliez, ce que le PO a demandé.

git reset HEAD^ /path/to/file

Vous verrez quelque chose comme le suivant ...

Changements à commettre: (utilisez "git reset HEAD ..." pour désactiver)

modifié: / chemin / vers / fichier

Modifications non mises en scène pour validation: (utilisez "git add ..." pour mettre à jour   ce qui sera commis) (utilisez "git checkout - ..." pour vous défausser   changements dans le répertoire de travail)

modifié: / chemin / vers / fichier

  • "Changements à commettre" est la version précédente du fichier avant la validation. Cela ressemblera à une suppression si le fichier n'a jamais existé. Si vous validez cette modification, il y aura une révision qui rétablit la modification du fichier dans votre branche.
  • "Modifications non validées pour validation" correspond au changement que vous avez effectué et à l'état actuel du fichier

À ce stade, vous pouvez faire ce que vous voulez dans le fichier, par exemple en le réinitialisant à une version différente.

Lorsque vous êtes prêt à commettre:

git commit --amend -a

ou (si vous avez d'autres changements que vous ne voulez pas encore commettre)

git commit add /path/to/file
git commit --amend

28
2017-12-07 07:13



Si vous voulez conserver votre commit (peut-être que vous avez déjà passé un peu de temps à écrire un message de commit détaillé et que vous ne voulez pas le perdre), vous voulez seulement supprimer le fichier de la validation, mais pas du dépôt:

git checkout origin/<remote-branch> <filename>
git commit --amend

9
2018-06-17 20:07