remota rama eliminar crear comandos clonar git branch git-gc

crear - ¿Cómo eliminar REALMENTE una rama git(es decir, eliminar todos sus objetos/confirmaciones)?



git pull (2)

Tengo un árbol git como

A---B---C topic / D---E---F---G master <--

Me gustaría eliminar el tema y todos los objetos en él.

Tomo nota de la SHA ID del tema, luego escribo:

git branch -D topic git gc # <-- I also tried prune here... git checkout -b temp <SHA1 ID of topic>

Después del último comando espero recibir un error (algo como "ID de objeto inexistente ..." o algo así). Sin embargo, no hay ningún error y gitk muestra la misma estructura de árbol que la anterior.

¿Qué me estoy perdiendo? ¿Pensé que se supone que gc / prune deben eliminar todos los objetos inalcanzables?


A menudo, la prune gc no es suficiente para deshacerse de los objetos adicionales en el repositorio. Si aún se hace referencia a los compromisos en el reflog, no se considerará que esos objetos son inalcanzables y, por lo tanto, están listos para la poda.

Esto es lo que funcionó para mí:

git reflog expire --expire=now --all git gc --aggressive --prune=now git repack -a -d -l

Esto hará algunos cambios en el historial de su repo y puede presentar dificultades si otros dependen de las ramas que se quitan.

Puede que tenga que volver a clonar su repositorio para ver realmente una diferencia en su tamaño.


Nota de mayo de 2010: Como lo mencionó Jakub , si su rama se fusionara, el tema aún sería accesible.

Aquí, supongamos que no hubo fusión.
Luego, como se menciona en el libro de ProGit y se detalla en esta pregunta de SO :

git gc --prune=now

debería ser suficiente (deberías llamar directamente a git prune ). Puedes controlar eso con un git count-objects -v .
Edición de abril de 2012: en los comentarios, confirma que podrían requerirse pasos adicionales, como se detalla en la answer (pero sin el git repack ).
Así que en lugar de un git gc --prune now :

git reflog expire --expire=now --all git gc --aggressive --prune=now