2016-09-26 1 views
0

J'ai un petit projet personnel qui est un dépôt git avec juste une branche maître et plusieurs commits dedans. (19, en fait.) J'ai découvert que j'ai accidentellement inclus plusieurs fichiers .psd dans le repo. C'est arrivé le 7ème commit. J'ai réalisé mon erreur sur le 17ème commit et ajouté .psd à .gitignore. Comment puis-je supprimer de façon rétroactive certains fichiers (dans ce cas * .psd) de ces validations? Sinon, comment puis-je supprimer leur dossier des commits?Comment faire pour supprimer rétroactivement certains types de fichiers de plusieurs commits git

Serait-ce: git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD, selon this page?

Répondre

0

Votre commande semble presque correcte, sauf que vous devez spécifier une plage sur laquelle appliquer la branche de filtre. Je crains que, comme vous l'avez écrit maintenant, vous puissiez l'appliquer à toute votre histoire, ce qui pourrait ne pas être ce que vous voulez. En supposant que vous vouliez couvrir la gamme de la validation contenant les fichiers .psd à présent, vous utiliseriez:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD~12..HEAD 

Je suppose que vous avez 19 commits, dans lequel HEAD~12 se rapporterait au 7 commettre.

Mise à jour:

Si vous êtes inquiet au sujet de casser quelque chose en utilisant filter-branch, puis appuyez d'abord sur la branche à la télécommande comme une sauvegarde:

git push origin your_branch 

Mieux encore, pousser à une branche avec un nom différent, par exemple

git push origin your_branch:backup_branch 

Si quelque chose devait mal se passer, vous pourriez simplement supprimer votre branche locale et tirer à nouveau de la télécommande.

+0

Je n'ai pas encore exécuté la commande, heureusement. Est-il possible d'exécuter cette commande dans une sorte de test? En outre, je serais bien de supprimer les fichiers .psd de tous les commits, mais ils ne sont présents dans plusieurs d'entre eux. – Flobin

+0

@Flobin J'ai mis à jour ma réponse, en vous donnant une option de sécurité que vous pouvez utiliser pour vous protéger contre les calamités. –