tool - git merge squash y conflictos recurrentes



types of merge git (1)

Al squash la fusión, ha creado una confirmación que tiene el efecto de, pero en realidad no es, una fusión.

Es decir, el árbol de trabajo tiene las modificaciones que cabría esperar, pero los metadatos no: crucialmente, el compromiso no tiene dos padres (uno en el master y otro en el alt ) y, por lo tanto, las combinaciones posteriores no pueden resolver el problema. último ancestro común.

Usos utiles de la squash

  1. fusionar una rama de función completamente terminada en el master . Acumularé cualquier información útil en el compromiso aplastado, pero específicamente no quiero que el historial de desarrollo incremental de esta característica contamine la línea de tiempo del compromiso master .
  2. fusionando varias características independientes (o contribuciones de diferentes desarrolladores) en la misma rama de integración, de nuevo sin conservar sus historiales incrementales. Podría rebautizarlos todos juntos, y luego usar rebase -i para aplastar sus compromisos, pero esto es más fácil

Usos inútiles de la squash

Cualquier combinación en la que desee mantener intactos el historial y los metadatos de ascendencia , como, por ejemplo, cada vez que desee que las combinaciones recursivas repetidas funcionen correctamente , específicamente lo que el OP está tratando de hacer .

squash simplemente no es realmente un buen valor predeterminado, por lo que no es el valor predeterminado.

Tengo un repositorio git con master y ramas alt . alt rama alt contiene la versión modificada del código master , y estoy intentando fusionar los cambios de master a alt esta manera:

git merge --squash master

Fusionar resultados en conflicto:

Auto-merging myproject/foo/bar
CONFLICT (content): Merge conflict in myproject/foo/bar
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.

Después de resolver conflictos y confirmar cambios, todo parece estar bien, pero cuando ejecuto git merge --squash master nuevamente (sin hacer ningún cambio en ninguna rama) obtendré el mismo error de conflicto.

¿Porqué es eso? ¿Qué me perdí?





git-merge