Elimine los refs / original / heads / master del repositorio git después de la rama de filtro - trree-filter?

Tuve la misma pregunta que aquí: Nuevo repositorio git en el directorio raíz para colocar el repositorio existente en un subdirectorio

Utilicé esta respuesta aquí: Nuevo repositorio git en el directorio raíz para incluir el repositorio existente en el subdirectorio

Ahora gitk --all muestra dos historias: una de ellas alcanzó el punto más alto en el master actual, y la otra - original/refs/heads/master .

No sé cuál es la segunda historia, o cómo quitarla del repositorio. No necesito dos historias en mi repositorio.

¿Cómo me deshago de él?

Para reproducirse:

 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' 

Ahora tenemos el problema inicial con el cartel. Mueva la raíz del repositorio de git a la raíz del proyecto usando la respuesta anterior:

 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 

Ahora mira mi problema actual:

 gitk --all  git show-ref 

¿Cómo me deshago de refs/original/heads/master y todo el historial relacionado?

137
05 окт. establecer goofeedude 05 oct. 2011-10-05 01:38 '11 a la 1:38 2011-10-05 01:38
@ 3 respuestas

refs/original/* existe como copia de seguridad si ha dañado la rama de su filtro. Créeme, esta es una muy buena idea.

Tan pronto como revise los resultados, y esté muy seguro de que tiene lo que desea, puede eliminar la referencia ref:

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

o si lo hiciste con muchos enlaces, y quieres borrarlo por completo:

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

(Esto se toma directamente de la página del manual de la rama de filtro.)

Esto no se aplica a usted, sino a aquellos que pueden encontrarlo: si crea una rama de filtro que elimina el contenido que ocupa un espacio de disco significativo, también puede ejecutar git reflog expire --expire=now --all y git gc --prune=now antes de la expiración de su reflog y elimine los objetos no utilizados. (Advertencia: completamente, absolutamente irreversible. Asegúrate antes de hacerlo).

240
05 окт. La respuesta está dada por Cascabel 05 oct. 2011-10-05 01:44 '11 a la 1:44 2011-10-05 01:44

Y si estás en Windows PowerShell:

border=0
 git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ } 
6
13 янв. La respuesta la da Guilherme Duarte el 13 de enero. 2017-01-13 22:59 '17 a las 10:59 pm 2017-01-13 22:59

filter-branch almacena las copias de seguridad, por lo que los repositorios deben limpiar los archivos y la recolección de basura. Antes de eliminar, asegúrese de que esta copia de seguridad no es necesaria:

 rm -Rf .git/refs/original git gc --aggressive --prune=now 
0
19 сент. Respuesta dada por Kiryl Plyaskevicz el 19 de septiembre. 2018-09-19 11:38 '18 a las 11:38 2018-09-19 11:38

Otras preguntas sobre etiquetas de o Haz una pregunta