¿Cómo desmarcar temporalmente?

Empecé una twig de características B de la twig A. Luego hice algunos cambios en ambas. Fusionar A en B y luego B en A resulta en que ambas cabezas apunten a la misma confirmación fusionada (que es lo que yo quería porque los cambios en A también deberían afectar a la twig B). Ahora por un time solo A experimentará cambios.

¿Hay alguna manera de hacer que B se adhiera a A hasta que pague B y haga un commit allí? Por supuesto, podría simplemente eliminar B y volver a crearlo cuando se bifurque de nuevo, o trabajar con A y fusionarlo en B antes de volver a bifurcar, pero todo depende de que recuerde mi intención …

No, no puedes pegar B a A como lo describiste.
Ya has enumerado las opciones alternativas. Simplemente eliminaría B , eso asegura que recuerdes que tienes que ramificar de nuevo 🙂

Supongo que el nombre real de B es lo suficientemente evocador como para simplemente verlo en la salida de la git branch de git branch o en la pantalla de gitk --all es suficiente para recordarle la nueva function que eventualmente desea agregar.

La próxima vez que hagas cambios a A y quieras que B se ponga al día, revisa B y avanza a la cabeza de A. Usted escribió que A y B actualmente apuntan al mismo compromiso. En el futuro, cuando hayas realizado cambios en A, la historia de B aún no includeá nada que no esté en A, por lo que esta es una fácil rebase:

  git rebase AB 

El command anterior marca B, por lo que cuando esté listo para seguir trabajando en A:

  git checkout A 

Si vuelves a unir A a B, debería saltar hacia adelante para cumplir con A, y luego simplemente comienzas a cometer contra B nuevamente.

Podrías dejar que B sea una queue de parches (usando algo parecido a una quilt ) encima de A. Entonces puedes trabajar en ello a tu gusto; cada vez que quiera actualizar a la versión más nueva de A, abrirá sus parches, actualizará A, y luego volverá a poner sus parches y arreglará lo que esté roto.

Mercurial en realidad tiene una extensión interna para hacer esto fácilmente y mantener los parches bajo control de revisión.

Hago esto todo el time, y funciona muy bien cuando juegas con un montón de ideas que no están lists para el compromiso.

¿Es eso lo que estás buscando?

Digamos que tienes una twig principal con tu línea de código principal. Luego decides implementar una nueva function foo y crear una nueva twig foo para eso. Entonces te comprometes felizmente con foo , desarrollando tu function y descubriendo que hay un error en tu twig principal . En este caso, el flujo de trabajo de git habitual es verificar que el maestro solucione el error. Luego, cuando continúe desarrollando su function, finalice la búsqueda de foo y actualícela con su twig maestra utilizando git merge master . Entonces tienes todo en order y no hay necesidad de pegar nada en ninguna parte.

(O bien, puede olvidarse de actualizar foo y fusionar los cambios cuando luego combine foo con su twig principal ).