J'ai modifié deux fichiers a
, b
dans le dernier commit. Mais les fichiers b
ne doivent pas être validés. Quel est le flux de travail pour modifier cela?
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é.
... Then stash/delete b, re-commit..
, Ici ne devrait pas le motThen
êtreafter
? ---amend
après stach / supprimer b, ...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' indexla source
git 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 consistergit 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.la source
Si vous voulez supprimer b de votre dernier commit
Si vous souhaitez supprimer toutes les modifications apportées à b dans votre dernier commit
la source
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:
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.la source