¿Por qué mi historia de git parece un tree de navidad?

Al hacer git log --decorate --oneline --graph en uno de nuestros repositorys poco antes de Navidad, encontramos que la siguiente estructura había aparecido (rotada para enfatizar el tenue tema festivo):

Salida de registro de git redactada, rotada para que parezca un árbol de Navidad

¿Cómo surgió este patrón en el gráfico de compromiso?

Esto es deliberadamente algo tonto, por supuesto, pero aquí hay un punto interesante: a menudo es difícil ver cómo interpretar patrones particulares en el gráfico de compromiso cuando los ves en tu browser de historial git.

En este caso, la situación era que había una confirmación no realizada en la punta de la twig master en un clon del repository. Luego, git pull se ejecutó muchas veces en el mismo repository, durante un período de time en el que se realizaban muchos trabajos nuevos en la etapa anterior. (En este caso, sucedió debido a una secuencia de commands automatizada, pero lo mismo puede ocurrir si un desarrollador simplemente recurre repetidamente a una sucursal para mantenerla actualizada, en lugar de, por ejemplo, cambiarla).

Cada extracción cuando había nuevos commits upstream creaba un nuevo commit de fusión, ya que siempre había un commit en master que no estaba en master upstream.

Finalmente, el historial de la twig maestra en este repository se empujó hacia arriba, por lo que otros desarrolladores vieron esta estructura en el gráfico de confirmación aparecer de repente cuando sacaron del repository aguas arriba.

Si tienes algún historial con una estructura similar, y quieres saber qué compromiso / desarrollador fue el que causó este problema, puedes mirar hacia abajo con las estrellas (básicamente siguiendo al primer padre de cada fusión) hasta que llegues a el primer compromiso sin fusión. En el caso de la image, eso fue b275805 – la confirmación que debería haberse realizado antes.

Esta es una de las razones por las que las personas a menudo prefieren usar git pull --rebase , lo que simplifica el historial sin usar.

Para dar crédito donde es debido, mi colega Matthew Somerville vio esto y resolvió lo que estaba pasando.