J'ai modifié deux fichiers a
, b
dans le dernier commit. Mais le fichier b
ne doit pas être validé, quel est le workflow 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 réponse plus récente (écrit 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 before the last.
Ensuite, vous pouvez 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 le:
(premier stash ou save 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 arborescent que vous souhaitez remplacer par la dernière validation, comme d’habitude (cela inclut les chemins habituels -i/-o et explicite), et l’éditeur de journal de validation est semé 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 seraient les parents - de sorte que le commit le plus récent 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
- pour réinitialiser index à cette dernière version, en laissant la copie de travail intacte.git commit --amend
- pour modifier ce dernier engagement afin d'inclure le index changesAlternativement, 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)
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 faire git add -p
pour comprendre exactement ce que je veux valider.