J'ai essayé de supprimer un fichier de mon référentiel distant en exécutant:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Mais Git se plaint que
Impossible de créer une nouvelle sauvegarde. Une sauvegarde précédente existe déjà dans refs/original /
Forcer l'écrasement de la sauvegarde avec -f
rm: impossible de supprimer /.git-rewrite/backup-refs: autorisation refusée
rm: impossible de supprimer le répertoire /.git-rewrite: répertoire non vide
C'était après avoir déjà supprimé le répertoire .git-rewrite sous Windows.
Comment puis-je supprimer ce fichier? C'est un fichier de 29 Mo assis sur mon référentiel, j'ai donc tout à fait besoin de supprimer le fichier.
J'ai essayé de supprimer le commit dans git rebase -i
, mais apparemment parce que le commit a touché beaucoup de fichiers différents, Git se plaint de conflits et j'ai avorté pour être en sécurité.
Vous avez déjà effectué une opération de branchement de filtre. Après la branche de filtre, Git conserve les références aux anciens commits, au cas où quelque chose se passerait mal.
Vous pouvez les trouver dans .git/refs/original/…
. Supprimez ce répertoire et tous les fichiers qu'il contient, ou utilisez le -f
flag pour forcer Git à supprimer les anciennes références.
git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Utilisez cette commande pour supprimer la sauvegarde d'origine:
git update-ref -d refs/original/refs/heads/master
Voici Gist que j'ai utilisé pour filtrer la branche de mon dépôt git: https://Gist.github.com/k06a/25a0214c98bc19fd6817
J'ai eu le même problème et la réponse ci-dessus ne l'a pas résolu. Il ne restait aucun répertoire .git/refs/original /. La solution pour moi a été de supprimer le fichier .git/packed-refs.
Ajoutez une force à la commande de branche de filtre.