J'ai modifié deux fichiers a
, b
dans le dernier commit. Mais le fichier b
ne devrait pas être commité, quel est le flux de travail pour modifier cela ?
Réponses
Trop de publicités?Mise à jour (quelques années plus tard)
Il est trivial de le retirer de l'index seulement.
Vrai : vous pouvez réinitialiser un fichier à son contenu d'index assez facilement, comme la fonction réponse plus récente (écrit par Matt Connolly ) suggère :
git reset HEAD^ path/to/file/to/revert
HEAD^
permet au fichier d'accéder à son contenu dans le commit précédent. avant le dernier.
Alors vous pouvez git commit --amend
comme je l'avais initialement écrit ci-dessous.
Avec Git 2.23 (août 2019), vous pourriez utiliser la nouvelle fonction git restore
comando
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'avais initialement écrit ci-dessous.
Réponse originale (janvier 2011)
Si c'est votre dernier commit (et que vous ne l'avez poussé nulle part), vous pouvez modifier il :
(première cachette ou sauvegarde b
)
git commit --amend
Puis supprimer b, re-commit. Restaurez b et vous avez terminé.
--amend
Utilisé pour modifier l'extrémité de la branche en cours.
Préparez l'objet d'arbre que vous voudriez remplacer le dernier commit comme d'habitude (cela inclut les -i/-o habituels et les chemins explicites), et l'éditeur de journal commit est ensemencé avec le message commit de la pointe de la branche actuelle.
Le commit que vous créez remplace la pointe actuelle - si c'était une fusion, il aura les parents de la pointe actuelle comme parents - donc le commit supérieur actuel est écarté.
-
git diff --name-only HEAD^
- (facultatif) utiliser pour lister les fichiers qui ont été modifiés en le dernier commit. -
git reset HEAD^ path/to/file/to/revert
- pour réinitialiser le indice à cette dernière version, laissant la copie de travail intacte. -
git commit --amend
- de modifier ce dernier commit pour inclure le indice changements
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 voulez 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 bidouillage d'index, mais qui préserve néanmoins l'ancien message 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 cette méthode parce que (a) elle utilise des commandes que j'utilise régulièrement, et (b) je peux faire git add -p
pour savoir exactement ce que je veux commit.