Supprimer le fichier de commit

J’ai une liste de fichiers modifiés dans le repository git. Il y a un fichier que je ne veux pas commettre pour le moment. Est-ce que je peux faire:

git commit -a 

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

Vous voulez faire ceci:

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

Soyez sûr et faites cela du plus haut niveau du repo; add -u ajoute les modifications dans le répertoire en cours (récursivement).

La ligne de clé indique à git de réinitialiser la version du chemin indiqué dans l’index (la zone de transfert pour la validation) vers la version de HEAD (la validation actuellement extraite).

Et avertir d’avance d’un piège pour les autres lecteurs de ceci: add -u met en scène toutes les modifications, mais n’ajoute pas de fichiers non suivis. C’est la même chose que ce que commit -a fait. Si vous souhaitez également append des fichiers non suivis, utilisez add . append récursivement tout .

git rm --cached le supprime de l’ensemble de validations (“dés-ajout”); cela ressemble à ce que vous voulez.

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

 git checkout origin/  git commit --amend 

ET si vous n’avez pas poussé les modifications sur le serveur, vous pouvez utiliser

 git reset --soft HEAD~1 

Utilisez des cachettes 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 validez accidentellement un fichier et souhaitez réécrire votre historique, utilisez:

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

et squash aux deux principaux commits. Vous pouvez écrire un script d’aide pour effectuer l’une de ces opérations si vous préférez ne pas valider automatiquement un ensemble de fichiers connu.

Peut-être pourriez-vous également utiliser stash pour stocker temporairement vos modifications dans un fichier patch, puis les réappliquer (après une vérification pour revenir à l’ancienne version). Cela pourrait être lié à cet autre sujet: Comment extraire un seul fichier (ou modifier un fichier) à partir d’une .

Répondre:

 git reset HEAD path/to/file 

Vous devez réinitialiser ce fichier à son état d’origine et le valider à nouveau avec --amend . Cela se fait plus git checkout HEAD^ 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(-) 

La voici: restaure la version précédente

 $ git checkout HEAD^ file-b 

engagez-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(-)