¿Por qué github crea una bifurcación en el tree de commit cuando squash & merge?

Tenía la siguiente historia en mi tenedor:

x feature & origin/feature | x upstream/feature 

Luego hice una request de extracción que fue aplastada y fusionada con éxito. Cuando selecciono cambios desde el nivel superior, mi historial se ve así:

 x upstream/feature | x feature & origin/feature | / x 

Esperaba lo siguiente:

 x feature & origin/feature & upstream/feature | x 

Entonces, ¿es el comportamiento esperado de las requestes de extracción de github o he arruinado algo?

El button "squash and merge" de GitHub siempre crea una nueva confirmación que consiste en el resultado de aplicar cada confirmación en la request de extracción. (Más precisamente, crea una nueva confirmación que usa la acción de combinación – "fusionar como verbo" – pero hace una confirmación ordinaria que no es de fusión. Esto es también lo que hace la línea de command git merge --squash .)

Cuando hay exactamente una confirmación en la request de extracción, esto hace una copy de la confirmación.

Si hay dos compromisos, obtienes:

 * (upstream/feature) the squash commit that is not a merge | * (feature, origin/feature) commit 2 | * commit 1 |/ * the common base across your GitHub repo and their GitHub repo 

Tenga en count que si el repository en sentido ascendente utiliza fusión real, el gráfico es casi el mismo, excepto que dice:

 * (upstream/feature) the merge commit that IS a merge |\ | * (feature, origin/feature) commit 2 | * commit 1 |/ * the common base across your GitHub repo and their GitHub repo 

De cualquier manera, si tiene la intención de usar la combinación merge o fusionar (es decir, no fusionar sino aplastar), debe mover su propia twig para señalar su compromiso y olvidarse de su serie de confirmaciones. Si las personas que se encuentran en la etapa inicial se fusionaron, esto puede ser difícil: debes lograr que todo tu equipo descarte su versión de la feature y cambie a la confirmación de punta en la function ascendente, aunque esto signifique perder tus propios compromisos . Si la gente de nivel superior fusionó tu confirmación, es mucho más fácil: simplemente puedes permitir que Git realice una "fusión" no real en una fusión en todo desde la punta de tu feature hasta la feature subida.