130 votes

Comment modifier le dernier commit pour désajuster un fichier ?

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 ?

122voto

Runeslinger Points 9379

Mise à jour (quelques années plus tard)

Jan Hudec

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é.

76voto

G910 Points 1
  1. git diff --name-only HEAD^ - (facultatif) utiliser pour lister les fichiers qui ont été modifiés en le dernier commit.
  2. git reset HEAD^ path/to/file/to/revert - pour réinitialiser le indice à cette dernière version, laissant la copie de travail intacte.
  3. git commit --amend - de modifier ce dernier commit pour inclure le indice changements

14voto

Sairam Points 775

Alternativement, si vous utilisez git gui il 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 commit.

9voto

pingo Points 129

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)

7voto

Justin L. Points 693

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X