2010-02-26 8 views
74

En Git, ¿qué significa la "eliminación" de una rama?Eliminación de la rama de Git

¿Se habrá ido del repositorio? ¿O aún será navegable a través del git branch?

Lo que realmente quiero hacer es marcar una rama como "callejón sin salida", es decir, la rama está lejos de ser maestra, que nadie debería usarla como punto de partida, aunque hubo algunas buenas ideas en esa rama, entonces nos gustaría guardarlo, para referencia.

Respuesta

150

Puede eliminar la rama, pero primero etiquetarla para que su historial no desaparezca. De esta manera, la sucursal no aparece en la lista de sucursales, lo que debería evitar que las personas trabajen en ella, pero el trabajo no se borrará permanentemente (incluso después de que se ejecute la recolección de basura). Por ejemplo, cada vez que tengo una rama que se ha vuelto irrelevante, pero no estoy preparado para eliminarla permanentemente, la etiqueto como "archivo/< nombre-rama >".

Mientras que en master o alguna otra rama:

git tag archive/foo foo 
git branch -D foo 

Esto crea una etiqueta llamada archive/foo de la rama antes de eliminar foofoo. También puede agregar un mensaje a la etiqueta, que explica lo que está en la rama, por lo que existía, por lo que ahora es un callejón sin salida, etc.

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo 

La posibilidad de grabar la razón por una rama que se está obsoleta es quizás una ventaja de etiquetar frente a mover ramas a un espacio de nombres alternativo.

Si alguna vez necesita para resucitar a una rama que se ha archivado esta manera, es tan simple como:

git branch foo archive/foo 
git tag -d archive/foo  # Optional 

Ahora la rama está de vuelta como si nunca se borra.

+1

¿Cómo funciona esto para los repos remotos? –

+5

@sardaukar: Esto también puede funcionar con repos remotos presionando la etiqueta de archivo (usando la opción '--tags' a' git push') y luego eliminando la rama remota (usando '' ' refspec mientras empuja). Por ejemplo: 'git tag archive/foo foo; git branch -D foo; git push --etiquetas origen: foo' –

+0

Sería bueno si git tuviera una manera de informar automáticamente a las personas "esta rama se ha archivado" y mostrar el mensaje de confirmación, si las personas intentaron extraer de una rama archivada, pero no lo hace t. –

2

git branch -D <branchName> eliminará su bifurcación del depósito. No podrás verlo ni navegar más. Además, perderá todos los cambios de archivos realizados en esa rama.

https://git-scm.com/docs/git-branch

2

ramas Git se almacenan como referencias a una revisión. Si elimina la rama, se elimina la referencia; si nada más hace referencia a esa revisión, eventualmente será basura recolectada. Además, si elimina la rama, se habrá ido (de su repositorio). Si desea marcar una rama como obsoletos pero que sea alrededor para su uso posterior, se puede mover la rama en un subdirectorio:

$ git branch 
* master 
    testing_feature_one 
    testing_feature_two 
$ git branch -m testing_feature_one deprecated/testing_feature_one 
$ git branch 
    deprecated/testing_feature_one 
* master 
    testing_feature_two 

Como alternativa, puede crear un repositorio separado para las sucursales en desuso, tirar de ellos a través continuación, elimine ellos desde el original. En cualquier caso, afectará a cualquier usuario que esté siguiendo las sucursales: el contenido de su repositorio no cambiará (ni ninguno de los nombres de sus sucursales), pero si intentan volver a utilizarlo, lo harán. tiene que cambiar su objetivo en su configuración.

0

No será navegable a través de la rama git y hasta que se realice la recolección de elementos no utilizados, no se perderá del repositorio.

Si desea marcar la rama en cuestión como un callejón sin salida, simplemente hágalo (¡puede que no lo haga por usted pero puede hacerlo!).

Etiquetarlo (en cualquier forma que prefiera) como referencia histórica funciona.