Réponses:
Mise à jour (quelques années plus tard)
Il est trivial de le supprimer de l'index uniquement.
Vrai: vous pouvez facilement réinitialiser un fichier au contenu de son index, comme le suggère la réponse la plus récente (écrite par Matt Connolly ):
git reset HEAD^ path/to/file/to/revert
HEAD^
permet au fichier d'accéder à son contenu dans la précédente validation avant la dernière.
Alors vous pouvez git commit --amend
, comme je l'ai écrit à l'origine ci-dessous.
Avec Git 2.23 (août 2019), vous pouvez utiliser la nouvelle git restore
commande
git restore --source=HEAD^ --staged -- path/to/file/to/revert
plus court:
git restore -s@^ -S -- path/to/file/to/revert
Encore une fois, vous pouvez alors git commit --amend
, comme je l'ai écrit à l'origine ci-dessous.
Réponse originale (janvier 2011)
S'il s'agit de votre dernier commit (et que vous ne l'avez poussé nulle part), vous pouvez le modifier :
(première sauvegarde ou sauvegarde b
)
git commit --amend
Puis supprimez b, re-commettez. Restaurez b et vous avez terminé.
--amend
Utilisé pour modifier la pointe de la branche actuelle.
Préparez l'objet arbre que vous souhaitez remplacer par la dernière validation, comme d'habitude (cela inclut les chemins habituels -i / -o et explicites), et l'éditeur de journal de validation est alimenté avec le message de validation de la pointe de la branche actuelle.
Le commit que vous créez remplace le conseil actuel (s'il s'agissait d'une fusion, les parents du conseil actuel étaient les parents), de sorte que le premier commit actuel est ignoré.
git diff --name-only HEAD^
- (facultatif) permet de répertorier les fichiers modifiés lors de la dernière validation.git reset HEAD^ path/to/file/to/revert
- réinitialiser l' index à cette dernière version en laissant la copie de travail intacte.git commit --amend
- modifier ce dernier engagement pour inclure les modifications d' indexgit commit -a --amend
(c’est-à-dire ne pas ajouter de fichiers) pour l’étape 3, ou vous allez valider vos modifications de copie de travail, qui sont les modifications que vous essayez de supprimer. Une étape facultative 2.5 pourrait également consister git checkout path/to/file/to/revert
à nettoyer votre copie de travail.
git rm --cached path/to/file/to/revert
supprimez le fichier sans le supprimer de l'arborescence.
Alternativement, si vous utilisez git gui
, il vous suffit de sélectionner l’option "Modifier le dernier commit", le fichier ajouté apparaît dans la liste "Staged", cliquez sur son icône pour le déplacer dans la liste "Unstaged" et validez.
Si vous voulez supprimer b de votre dernier commit
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
Si vous souhaitez supprimer toutes les modifications apportées à b dans votre dernier commit
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
et supprimez la danse de sauvegarde / restauration (-1).
Une alternative qui ne nécessite pas de hackery d'index, mais conserve néanmoins l'ancien message de commit:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
J'aime ça parce que (a) il utilise des commandes que j'utilise régulièrement et (b) je peux le faire git add -p
pour comprendre exactement ce que je veux commettre.
... Then stash/delete b, re-commit..
, Ici ne devrait pas le motThen
êtreafter
? ---amend
après stach / supprimer b, ...