Retirer refs / original / heads / master de repo git après filter-branch –tree-filter?

J’ai eu la même question que celle posée ici: Nouveau référentiel git dans le répertoire racine pour subsumer un référentiel existant dans un sous-répertoire

J’ai suivi cette réponse ici: Nouveau référentiel git dans le répertoire racine pour subsumer un référentiel existant dans un sous-répertoire

Maintenant, gitk --all affiche deux historiques: un point culminant dans le master actuel et un nommé original/refs/heads/master .

Je ne sais pas ce que cette seconde histoire est, ou comment le retirer du repo. Je n’ai pas besoin de deux historiques dans mon référentiel.

Comment puis-je m’en débarrasser?

Pour se reproduire:

 mkdir -p project-root/path/to/module cd project-root/path/to/module mkdir dir1 dir2 dir3 for dir in * ; do touch $dir/source-file-$dir.py ; done git init git add . git commit -m 'Initial commit' 

Maintenant, nous avons le problème de l’affiche originale. Déplaçons la racine du repository git vers project-root en utilisant la réponse ci-dessus:

 git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD rm -rf path cd ../../../ # Now PWD is project-root mv path/to/module/.git . git reset --hard 

Maintenant, voyez mon problème actuel:

 gitk --all & git show-ref 

Comment puis-je me débarrasser de refs/original/heads/master et de toute l’histoire associée?

refs/original/* est là comme une sauvegarde, au cas où vous gâcheriez votre twig de filtrage. Croyez-moi, c’est une très bonne idée.

Une fois que vous avez inspecté les résultats et que vous êtes certain d’avoir ce que vous voulez, vous pouvez supprimer la référence sauvegardée:

 git update-ref -d refs/original/refs/heads/master 

ou si vous avez fait cela à plusieurs refs, et que vous voulez tout effacer:

 git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d 

(Cela provient directement de la page de manuel Filtrer.)

Cela ne s’applique pas à vous, mais à ceux qui peuvent trouver ceci: Si vous faites une twig de filtre qui supprime du contenu occupant un espace disque important, vous pouvez aussi lancer git reflog expire --expire=now --all et git gc --prune=now pour expirer vos reflogs et supprimer les objects maintenant inutilisés. (Attention: complètement, totalement irréversible. Soyez très sûr avant de le faire.)

Et si vous êtes dans Windows PowerShell:

 git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ }