Tuve la misma pregunta que se hizo aquí: Nuevo repositorio git en el directorio raíz para subsumir un repositorio existente en un subdirectorio
Seguí esta respuesta aquí: Nuevo repositorio git en el directorio raíz para subsumir un repositorio existente en un subdirectorio
Ahora, gitk --all
muestra dos historias: una que culmina en la corriente master
y otra que lleva el nombre original/refs/heads/master
.
No sé qué es esta segunda historia o cómo eliminarla del repositorio. No necesito dos historias en mi repositorio.
¿Como me deshago de esto?
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 del póster original. Muevamos la raíz del repositorio de git a project-root usando la respuesta vinculada anteriormente:
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
todo el historial asociado?
fuente
Respuestas:
refs/original/*
está ahí como una copia de seguridad, en caso de que estropee su rama de filtro. Créeme, es una muy buena idea.Una vez que haya inspeccionado los resultados y esté seguro de tener lo que desea, puede eliminar la referencia respaldada:
o si hiciste esto con muchos árbitros y quieres borrarlo todo:
(Esto se toma directamente de la página de manual de rama de filtro).
Esto no se aplica a usted, sino a otras personas que pueden encontrar esto: si realiza una rama de filtro que elimina el contenido que ocupa un espacio considerable en el disco, es posible que también desee ejecutar
git reflog expire --expire=now --all
ygit gc --prune=now
expirar sus registros y eliminar los objetos que no se utilizan ahora . (Advertencia: completamente, totalmente irreversible. Esté muy seguro antes de hacerlo).fuente
git update-ref -d refs/original/refs/heads/master
git update-ref -d original/refs/heads/master
? Sin embargo, solo tu segundo comando funcionó para mí.git update-ref -d refs/original/refs/heads/master
cierto. Puedes ver el nombre completo usandogit show-ref
.git show-ref refs/original/* --hash | xargs -n 1 git update-ref -d
?Y si estás en Windows PowerShell:
fuente
filter-branch
mantiene las copias de seguridad, por lo que el repositorio necesita limpiar los registros y la recolección de basura. Asegúrese de no tener necesidad en estas copias de seguridad antes de eliminarlas:fuente