Git PR con squash fusionando confusión

En la configuration de github, elegí la opción Allow squash merging , de modo que una request de extracción de la twig de desarrollo (con varias confirmaciones) se convierta en una única confirmación en la twig principal.

Dos cosas que no entiendo

  1. Después de fusionar el PR, la twig de desarrollo sigue siendo xx se compromete antes que la twig principal. Y la próxima vez haré un PR, esos commit xx estarán ahí incluso si ya están fusionados en la twig master. ¿Cómo es posible tener la twig de desarrollo en synchronization con el maestro después de fusionar un PR?

  2. Después de fusionar un PR, configuro el master de origen en la twig de desarrollo y sigo trabajando. Crea una confirmación de fusión, mientras que es exactamente el mismo contenido. ¿Cómo puedo evitar eso?

La solución a ambos problemas no es trabajar con una única twig de develop .

Para cada corrección / function en la que está trabajando, cree una nueva twig. Una vez que el desarrollo se ha solucionado, cree PR, fusiónelo al máster y elimine la twig de desarrollo.

Para su próximo arreglo / function: use una nueva twig basada en el último máster.

Este es el flujo de trabajo común.

1. Antes de la fusión, supongamos que la historia del master es ABC y la historia de PR es ADE . Después de la combinación de squash, master convierte en ABCF y PR permanece sin cambios. F incluye los cambios de D y E Squash-merge no combina D y E en un commit. Simplemente crea el nuevo compromiso F en el master . git log master..develop devuelve D y E , por lo que el develop está por delante del master por 2 confirmaciones. Los 2 compromisos son alcanzables desde el develop pero no desde el master . Aunque los dos cambios se han aplicado en el master , fue realizado por un nuevo compromiso, no por los dos commits. El código será el mismo ya sea por fusión normal o por combinación de squash, pero la historia será diferente. De hecho, cuando se trata de que A is ahead of B by n commits algo en este caso, no importa si se trata de una combinación normal o una combinación de squash, ya que git log master..develop el mismo resultado.

2. Debido a que el develop y el master son divergentes, tirar del master para develop trae un compromiso de fusión como se esperaba. Puede crear una nueva twig de PR desde el master . Otra opción es desarrollar git rebase master develop . Se mueve para develop el compromiso señalado por el master pero también hace que el develop local se divida con el develop en el repository remoto, por lo que no es una buena idea.

El síntoma que describes, que se develop aún está "por delante del master ", es exactamente la diferencia entre una fusión de squash (como lo has hecho) y una fusión real.

La gente se entusiasma con las fusiones de squash porque cuando las usas, el historial pnetworkingeterminado ya no muestra las confirmaciones individuales de la twig fusionada; pero (1) puedes usar cosas como git log --first-parent después de una fusión real para get el historial simplificado, y (2) las fusiones squash solo son útiles si es la última vez que traes cambios del objective ramifícate en la twig actual (generalmente porque vas a abandonar la twig de destino).

Entonces … ¿cómo puedes tener las twigs sincronizadas después de un RP? Al deshabilitar squash merge.

EN CUANTO A LA 2da pregunta … fusionar el maestro en tu twig es exactamente lo git pull master significa el git pull master . Si desea evitar eso, ¿cuál es el efecto deseado de ejecutar el command? Quiero decir, puedes evitar la fusión al no ejecutar el command de pull , pero sin saber lo que intentabas hacer, no puedo decir qué debes ejecutar.