J'utilise Git et j'ai validé quelques fichiers en utilisant la méthode suivante
git commit -a
Plus tard, j'ai découvert qu'un fichier avait été ajouté par erreur au commit.
Comment puis-je supprimer un fichier du dernier commit ?
J'utilise Git et j'ai validé quelques fichiers en utilisant la méthode suivante
git commit -a
Plus tard, j'ai découvert qu'un fichier avait été ajouté par erreur au commit.
Comment puis-je supprimer un fichier du dernier commit ?
Je pense que les autres réponses sont erronées, car il s'agit de déplacer les fichiers commis par erreur vers la zone de transit à partir du commit précédent, sans annuler les changements effectués sur ces fichiers. Cela peut être fait comme Paritosh Singh l'a suggéré :
git reset --soft HEAD^
ou
git reset --soft HEAD~1
Ensuite, réinitialisez les fichiers indésirables afin de les exclure de la validation :
git reset HEAD path/to/unwanted_file
Maintenant, faites un nouveau commit, vous pouvez même réutiliser le même message de commit :
git commit -c ORIG_HEAD
Merci pour cela. Il est intéressant d'ajouter que si vous avez déjà poussé votre commit précédent (erroné), et que vous essayez maintenant de git push
votre correctif à votre dépôt, il se plaindra Updates were rejected because the tip of your current branch is behind its remote counterpart.
. Si vous êtes sûr de vouloir les pousser (par exemple, si c'est votre fourchette), vous pouvez utiliser la fonction -f
pour forcer la poussée, par ex. git push origin master -f
. (Ne faites pas cela sur un dépôt amont dont d'autres personnes se servent).
ATTENTION ! Si vous voulez seulement supprimer un fichier de votre précédent commit, et que gardez-le sur le disque , lire La réponse de juzzlin juste au-dessus.
Si c'est votre dernière livraison et que vous voulez supprimer complètement le fichier de votre référentiel local et du référentiel distant vous pouvez :
git rm <file>
git commit --amend
Le drapeau amend indique à git de commiter à nouveau, mais de "fusionner" (pas dans le sens de fusionner deux branches) ce commit avec le dernier commit.
Comme indiqué dans les commentaires, l'utilisation de git rm
ici, c'est comme utiliser le rm
la commande elle-même !
Avertissement à ceux qui parcourent cette réponse : assurez-vous que vous voulez SUPPRIMER le fichier (comme dans gone gone gone !), et pas seulement le supprimer de la liste Commit.
Pour compléter ce que disent les autres (et pour qu'il soit plus facile de se rappeler de ne pas le faire, sauf si vous le voulez vraiment) : Le site rm
dans le git
commande est faire ce qui rm
lui-même le fait !
-1 git reset supprime les modifications apportées au fichier de la zone de transit, ici la modification a été validée.
Ok c'est bien pour moi, mais pourquoi l'adversaire ne veut pas de ça. Quel est le problème ?
La suppression du fichier à l'aide de rm le supprimera !
Dans git, vous ajoutez toujours à un commit plutôt que de le supprimer, donc dans ce cas, remettez le fichier dans l'état dans lequel il était avant le premier commit (cela peut être une action de suppression 'rm' si le fichier est nouveau) et ensuite re-commit et le fichier disparaîtra.
Pour remettre le fichier dans un état antérieur :
git checkout <commit_id> <path_to_file>
ou pour le remettre dans l'état où il se trouvait à l'HEAD distant :
git checkout origin/master <path_to_file>
puis modifiez le commit et vous devriez constater que le fichier a disparu de la liste (et non pas supprimé de votre disque !).
C'est la meilleure façon de modifier le dernier commit, celui qui n'a pas été poussé. Cela va réinitialiser les changements dans un fichier, en supprimant effectivement ce fichier du dernier commit.
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.
3 votes
Ce lien répond parfaitement à votre question : stackoverflow.com/questions/307828/
0 votes
@CharlesB : oui, c'est mon dernier commit.
10 votes
Avez-vous poussé le commit vers le serveur ?
7 votes
Je le fais juste en utilisant :
git reset filepath