2011-11-01 17 views
19

El comando git branch -a enumera un grupo de ramas que NO están en el repositorio, y NO las ramas locales. ¿Cómo se pueden eliminar?Eliminar ramas enumeradas por la rama git -a

* develop 
    master 
    remotes/origin/cloner 

Por ejemplo, remotes/origin/cloner solía existir en el repositorio, pero desde entonces ha sido eliminado y me gustaría que no aparezca al escribir git branch -a.

Respuesta

27

Si tiene ramas de seguimiento remoto (como origin/cloner en este caso) que se quedan después de la rama correspondiente se ha suprimido en el repositorio remoto, puede eliminar todas estas ramas de seguimiento a distancia con:

 
git remote prune origin 

El documentation for git remote explica esto como:

Elimina todas las ramas de seguimiento remoto añejos bajo <nombre>. Estas ramas obsoletas ya se han eliminado del repositorio remoto al que hace referencia el nombre < >, pero todavía están disponibles localmente en "remotos/<nombre>".

Con la opción --dry-run, informe qué ramas se podarán, pero no las pode.

+4

es mosto h expandir esto, quizás solo citando y enlazando a la documentación. –

+0

¡Gracias, Mark, por la gran edición! –

-5

También puede suceder que la referencia del repositorio remoto se haya eliminado del clon local, pero aún aparece en el resultado del comando 'git branch -a'. En cualquier caso, siempre se puede suprimir cualquier referencia simplemente borrar los archivos correspondientes:

$ rm -f .git/refs/remotes/cloner 
$ rm -rf .git/refs/remotes/deprecated_remote 
+0

Es una mala idea eliminar archivos directamente de '.git' en lugar de usar comandos de porcelana para hacerlo. –

+0

Git es bastante robusto. En general, es muy útil tener que editar el archivo .git/config, por ejemplo, para agregar el seguimiento de una rama determinada o para cambiar la URL de un repositorio remoto. Al mirar directamente debajo del capó, una vez puede entender más fácilmente cómo funciona Git, y darse cuenta de que es tan mágico como parecía la primera vez. Por lo tanto, no recomendaría que todo el mundo edite los archivos de Git bajo el capó, pero recomendaría que al menos tengan un botín en esos archivos. En el mininum, es muy instructivo. –

3

Para eliminar una rama que no se necesita más que puede utilizar el siguiente comando:

git branch -d -r origin/cloner 
+1

Esto necesita ser 'git branch -d -r origin/cloner', ya que' origin/cloner' es una rama de seguimiento remoto. –

0

También hacer

git push origin :cloner 

Para eliminar las sucursales remotas no deseados

+0

En este caso, la rama 'cloner' ya se ha eliminado del repositorio remoto, por lo que se producirá un error. La pregunta es preguntar cómo eliminar la rama de seguimiento remoto 'origin/cloner', que queda después de que alguien haya eliminado' cloner' en 'origen'. –

+0

Ya veo. Entonces, ¿no traería un git solo actualizar la lista de sucursales remotas? – Patrick