Elimina/oculta las ramas de git sin borrar las historias de confirmación
git-branch git-branch-sculpting (1)
Situación:
Tengo un repositorio principal con una rama de desarrollo principal y muchas ramas de "experimento" que brotan de él (por ejemplo, exp1
y exp2
). El propósito de estas ramas de experimento es servir como marcadores de posición para experimentos que generan resultados numéricos. Registro el nombre de la rama (y el ID de confirmación) de las ramas del experimento para poder regresar a las confirmaciones para ver con precisión el código y el historial detrás de los resultados.
Pero, ahora, hay tantas ramas de experimentos que se está haciendo difícil ver el árbol principal. Por lo tanto, estoy reconsiderando mi estrategia para mantener los marcadores de posición en el código detrás de cada conjunto de resultados (es decir, cada experimento). Obviamente, podría guardar el directorio de trabajo en cada sucursal, pero también sería bueno mantener el historial de confirmación.
Solución posible:
Una forma de lidiar con esto es mover las ramas del experimento a sus propios repositorios independientes, cada uno de ellos arraigado en el nodo secundario del nodo apropiado en el historial de confirmación de la rama dev. Aquí hay una ilustración de lo que quiero decir:
Haga clic here para obtener una versión más grande de la imagen (en imgur.com).
Así, por ejemplo, para la rama exp1
, me gustaría exportar los compromisos A->B->C
a un repositorio separado arraigado en el compromiso A
Luego, solo puedo grabar el hash de commit P1
para saber de dónde descendió la rama exp1
.
Pregunta:
¿Cómo puedo hacer eso?
Mejor pregunta:
Por otro lado, sospecho que hay una estrategia mucho mejor para hacer lo que quiero hacer, es decir, despejar el árbol para una inspección visual, pero mantener los marcadores de posición en las sucursales anteriores para que pueda volver a ellos si es necesario. Entonces, ¿alguien puede recomendar una estrategia para esto?
Aquí hay una alternativa: utilice referencias que no sean de rama para guardar las sugerencias de rama antes de eliminar los nombres de rama.
Dado que estas son referencias que no son de rama, no se mostrarán en la salida de git branch
, ni en las cosas mostradas por git log --branches
y gitk --branches
, por ejemplo. Sin embargo, se mostrarán en todos los listados y conservarán los objetos del repositorio.
Para crear o actualizar una referencia que no sea de sucursal, use git update-ref
. Elija un espacio de nombre dentro de refs/
que crea que no colisionará con algún uso futuro (los usos actuales son refs/heads/
para sucursales, refs/tags/
para etiquetas, refs/remotes/
para sucursales remotas, refs/notes/
para notas) , y refs/stash
para el alijo).