¿Cómo manejo las requestes de extracción paralelas para las twigs derivadas?

Mi equipo quiere que cree una request de extracción separada (con Bitbucket) para cada cambio lógico en un proyecto para que pueda ser revisado y aprobado fácilmente.

Necesito implementar las características A, B y C.

Creé la twig A, implementé el primer cambio y creé una request de extracción para A -> maestro. Ahora, mientras espero la revisión y aprobación, quiero trabajar en la próxima function. Creé una twig B derivada de A.

master \ A \ B 

Ahora también terminé de implementar B y quiero crear otra request de extracción para que mi equipo la revise. Si lo hago (B -> maestro) me muestra los dos compromisos de A y B (lo que tiene sentido, por supuesto), pero no quiero que mi equipo vuelva a revisar A.

Sé que podría hacer la segunda request de extracción B -> A, pero ¿qué pasará con esta request de extracción si A se fusiona con la maestra y se elimina después antes de que B se haya fusionado en A?

¿Cómo puedo tener requestes de extracción paralelas que contienen los cambios para A y B pero que son disjuntos?

Haga una twig para cada característica. Estas se llaman twigs de características . Si es necesario, bifurque otra sucursal. git checkout feature/1; git branch feature/2 git checkout feature/1; git branch feature/2 .

  D - E - F [feature/3] / A - B - C [master] \ G - H [feature/1] \ I - J [feature/2] 

Puede enviar feature/2 y feature/1 al mismo time, siempre y cuando deje en claro que feature/2 depende de feature/1 .

Sé que podría hacer la segunda request de extracción B -> A, pero ¿qué pasará con esta request de extracción si A se fusiona con la maestra y se elimina después antes de que B se haya fusionado en A?

Si la feature/1 se revisa y aún no se fusionó, debe volver a establecer la feature/2 encima de ella con la git checkout feature/2; git rebase feature/1 git checkout feature/2; git rebase feature/1 . Eso se vería así, K y L son las nuevas revisiones.

  D - E - F [feature/3] / A - B - C [master] \ G - H - K - L [feature/1] \ I - J [feature/2] 

Luego, después de la git checkout feature/2; git rebase feature/1 git checkout feature/2; git rebase feature/1 tendrías esto:

  D - E - F [feature/3] / A - B - C [master] \ G - H - K - L [feature/1] \ \ I - J I1 - J1 [feature/2] 

Luego git push --force en feature / 2. Tenga en count que los cambios originales todavía están allí en su repository local después de una rebase. Eventualmente serán basura recolectada, pero mientras tanto, si git reflog un error, puedes recuperarlos examinando git reflog .

El mismo procedimiento después de que la feature/1 se haya fusionado y eliminado (por cierto, todavía tendrá su sucursal local que deberá eliminar). Al eliminar una twig, solo se elimina la label, la twig aún está allí (a less que se "fusionen" mediante el reajuste o el aplastamiento). Tendrás esto.

  D - E - F [feature/3] / A - B - C ------------- M [master] \ / G - H - K - L \ I1 - J1 [feature/2] 

Debe volver a establecer la feature/2 en el maestro con git rebase master .

  D - E - F [feature/3] / A - B - C ------------- M [master] \ / \ G - H - K - L I2 - J2 [feature/2] 

Y luego git push --force .

De manera similar, si feature/3 aún está en revisión, debe volver a establecer la feature/3 en el master para asegurarse de que siga funcionando y facilitar el trabajo del integrador.


Si todo esto parece un poco complicado, envíe la feature/1 y espere hasta que se haya aceptado y se haya fusionado para enviar la feature/2 . Deberías hacer ese último bit, rebase feature/2 en el master .

Entonces, tienes una twig maestra .

  • Crea una nueva twig desde el maestro llamado A.
  • Crear una request de extracción para la twig A
  • Crea otra twig, B de la twig A.

Ahora, dado que B se creó a partir de A, también tendrá las confirmaciones de A. E incluso si A se fusiona en la twig maestra y la request de extracción para la twig A se cerrará, la twig A aún permanece.

  • Así que tome una master rebase ( maestro de git rebase ) en la twig A
  • Y luego tomar una rebase en la twig B de A
  • Finalmente toma master rebase en la twig B.