tutorial commits all git git-rewrite-history git-plumbing

tutorial - git squash all commits



Eliminar refs/original/heads/master de git repo after filter-branch--tree-filter? (2)

Y si estás en Windows PowerShell:

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

Tenía la misma pregunta que aquí: Nuevo repositorio git en el directorio raíz para subsumir un repositorio existente en un subdirectorio

Seguí esta respuesta aquí: Nuevo repositorio de git en el directorio raíz para subsumir un repositorio existente en un subdirectorio

Ahora, gitk --all muestra dos historias: una que culmina en el master actual, y una llamada original/refs/heads/master .

No sé qué es esta segunda historia ni cómo eliminarla del repositorio. No necesito dos historias en mi repositorio.

¿Como me deshago de esto?

Para reproducirse usted mismo:

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 cartel original. Vamos a mover la raíz del repositorio de git a la raíz del proyecto 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 y todo el historial asociado?


refs/original/* está allí como una copia de seguridad, en caso de que desordene su filtrar-rama. Créeme, es una muy buena idea.

Una vez que haya inspeccionado los resultados y esté seguro de que tiene lo que desea, puede eliminar la referencia respaldada:

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

o si le hiciste esto a muchos árbitros, y quieres borrarlo del todo:

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

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

Esto no se aplica a usted, sino a otros que pueden encontrar esto: si usted hace una sucursal de filtro que elimina el contenido que git reflog expire --expire=now --all un espacio de disco significativo, es posible que también desee ejecutar git reflog expire --expire=now --all y git gc --prune=now para caducar los reflogs y eliminar los objetos que no se usaron. (Advertencia: completamente, totalmente irreversible. Esté muy seguro antes de hacerlo).