web-dev-qa-db-fra.com

Supprimer un fichier de la liste qui sera commis

J'ai une liste de fichiers modifiés dans le référentiel git. Il y a un fichier que je ne veux pas valider pour le moment. Est-ce que je peux faire:

git commit -a

Pour valider tous les fichiers, puis en quelque sorte supprimer ce fichier de la validation en cours? Après cette suppression, il devrait toujours figurer dans la liste des fichiers non validés.

41
Max Frai

Vous voulez faire ceci:

git add -u
git reset HEAD path/to/file
git commit

Assurez-vous de le faire à partir du dernier niveau de la pension. add -u ajoute les modifications dans le répertoire en cours (de manière récursive).

La ligne de touche indique à git de réinitialiser la version du chemin indiqué dans l'index (la zone de stockage intermédiaire pour la validation) sur la version à partir de HEAD (la validation actuellement extraite).

Et un avertissement préalable pour les lecteurs qui lisent ceci: add -u applique toutes les modifications, mais n’ajoute pas les fichiers non suivis. C'est la même chose que ce que commit -a fait. Si vous souhaitez également ajouter des fichiers non suivis, utilisez add . pour ajouter de manière récursive everything .

58
Cascabel

git rm --cached le retirera du jeu de commit ("le désajoute"); cela ressemble à ce que vous voulez.

38
DavidR

si vous avez déjà poussé votre commit alors. faire

git checkout Origin/<remote-branch> <filename>
git commit --amend

ET Si vous n'avez pas transmis les modifications sur le serveur, vous pouvez utiliser

git reset --soft HEAD~1
12
Ashish Sajwan

Utilisez cachette; comme ça:

git add .
git reset Files/I/Want/To/Keep
git stash --keep-index
git commit -a -m "Done!"
git stash pop

Si vous accidentellement validez un fichier et souhaitez réécrire votre historique git, utilisez:

git reset HEAD~1 path/to/file
git commit -a -m "rollback"
git rebase -i HEAD~2

et écraser les deux premiers commets. Vous pouvez écrire un script d'assistance pour effectuer l'une ou l'autre de ces tâches si vous avez un ensemble connu de fichiers que vous préférez ne pas valider automatiquement.

5
Doug

Peut-être pourriez-vous également utiliser stash pour stocker temporairement vos modifications dans un fichier de correctif, puis le réappliquer (après une vérification pour revenir à l'ancienne version). Cela pourrait être lié à cet autre sujet: Comment puis-je extraire un seul fichier (ou les modifications apportées à un fichier) à partir d'une réserve git? .

1
ThR37

Réponse:

git reset HEAD path/to/file
0
Jordan Stefanelli

si vous avez fait une annonce git et que vous n'avez rien poussé, il vous suffit de le faire pour le décompresser de votre commit.

git reset HEAD <file> 

0
David

Vous devez réinitialiser ce fichier à son état d'origine et le valider à nouveau à l'aide de --amend. Ceci est fait plus facilement en utilisant git checkout HEAD^.

Préparez la démo:

$ git init
$ date >file-a
$ date >file-b
$ git add .
$ git commit -m "Initial commit"
$ date >file-a
$ date >file-b
$ git commit -a -m "the change which should only be file-a"

Etat avant:

$ git show --stat
commit 4aa38f84e04d40a1cb40a5207ccd1a3cb3a4a317 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 file-b | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Le voici: restaurez la version précédente

$ git checkout HEAD^ file-b

commettez-le:

$ git commit --amend file-b
[master 9ef8b8b] the change which should only be file-a
 Date: Wed Feb 7 17:24:45 2018 +0100
 1 file changed, 1 insertion(+), 1 deletion(-)

Etat après:

$ git show --stat
commit 9ef8b8bab224c4d117f515fc9537255941b75885 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
0
Daniel Alder

La plupart de ces réponses circulent autour de la suppression d'un fichier de la "zone de préparation" avant le commit, mais je me retrouve souvent à regarder ici après que je l'ais déjà et que je veuille supprimer certaines informations sensibles du commit que je viens de faire.

Un truc facile à retenir pour vous tous, git commit --amend, comme moi, est que vous pouvez:

  1. Supprimez le fichier commis accidentellement.
  2. git add . pour ajouter la suppression à la "zone de stockage intermédiaire"
  3. git commit --amend pour supprimer le fichier de la validation précédente.

Vous remarquerez dans le message de validation que le fichier indésirable est maintenant manquant. Hourra! (Valider SHA aura changé, soyez donc prudent si vous avez déjà appliqué vos modifications à la télécommande.)

0
Breedly