2012-06-14 12 views
22

He creado una rama con "git checkout -b mybranch". Parece que algo salió mal, y ahora no puedo borrarlo usando "git branch -D mybranch". Dice: error: no se encontró la rama 'mybranch'.Eliminar rama rota en git

+0

Aquí hay una pregunta tonta: ¿cómo sabes que todavía no se ha eliminado y todavía existe? – bdares

+1

¿Puedes ver tu sucursal en 'git branch', o en el disco en' .git/packed-refs' o '.git/refs/heads'? – Rup

+2

Sí, veo mi sucursal en git branch –

Respuesta

41

Si git branch -D realmente no funciona, su única opción es dejarlo de lado y editar usted mismo el estado de checkout de git. Hay que ir a la raíz del directorio de su salida (en el que el directorio es .git) y

  1. edición .git/packed-refs; si ve una línea con el nombre de su sucursal, elimínela
  2. busque en el archivo .git/refs/heads un nombre de su sucursal; si ve uno, elimínelo
1

Obviamente, no necesita eliminar una rama que no existe. Use git branch para ver una lista de sucursales, si no está allí, luego no hay una bifurcación y no necesita eliminarla. De lo contrario, asegúrese de escribir el nombre correctamente y git branch -D debería funcionar.

Sin embargo, no es necesario que se preocupe demasiado por una rama rota que aún podría estar cerca pero que es inaccesible. Las sucursales en Git son, de hecho, simples archivos de 40 bytes, por lo que no es realmente algo de lo que deba preocuparse.

+1

También pruebe 'git branch -a' para asegurarse de que no haya empujado accidentalmente la rama a su repositorio remoto. Si es así, podría leer las instrucciones sobre cómo eliminar esa rama [aquí] (http://gitready.com/beginner/2009/02/02/push-and-delete-branches.html) – Shahbaz

+0

A menos, por supuesto, que pueda 'push' debido a una rama rota/eliminada que todavía está en packed-refs. – steviesama

+0

sigue siendo un dolor en la parte trasera, al ver los viejos rotos de la rama obstruyendo el cliente de git. Nadie quiere eso. Obviamente, el amigo está tratando de eliminar una rama que "parece" que existe después de haber usado la rama git. –

7

He utilizado git update-ref -d refs/heads/<branch name> para solucionar este problema. Presumiblemente, esto hace lo mismo que sugiere Rup en la respuesta seleccionada, excepto que está interconectado mediante la CLI de Git.

1

Tuve el mismo problema. La rama estaba en la lista de sucursales cada vez que ejecuté el comando git branch, pero no pude eliminarla.

La solución en mi caso fue simple y un poco inesperada: comprobé la rama rota git checkout broken_branch (sí, funcionó), luego revisé de nuevo a maestro y ... nuevamente ejecuté git branch -D broken_branch.

1

Si el nombre rama contiene caracteres especiales que necesita para ser citado:

$ git branch -D 'ENH-Adding-unit-``julian``-to-``to_datetime``' 
+0

Gracias por esta sugerencia. Mi rama se llama 'sandpit-ş-blockquotes' - Intenté citarla como sugirió, pero todavía no funcionó :-( ' $ git branch -D 'sandpit-ş-blockquotes''. ¿Usted tiene más ideas/sugerencias? – samjewell

+0

@samjewell Quizás los símbolos de Unicode no se interpreten directamente en la consola? – Winand

+1

@samjewell Pude crear y eliminar una rama en SourceTree https://pp.vk.me/c636719/v636719561/19786/ Q5DRz-b39VE.jpg – Winand

1

que tienen el mismo problema git branch -d <branch_name> no estaba funcionando, y no me encontré nada en .git/packed-refs y .git/refs/heads pero tengo archivos en

.git/refs/remotes/origin

con el nombre de las ramas que no pude eliminar localmente ni remotamente. Pero después de eliminar los archivos con el branch_name que quería eliminar, no se mostraba en local.

suprimirlo en uso remoto

git fetch -p origin

La opción -p --prune dice que antes de ir a buscar, eliminar cualquier referencia de seguimiento a distancia que ya no existen en el control remoto. utiliza el comando

git push origin :<branch_name_you_was_unable_to_delete>

eliminar en remoto.

Y listo.:)