¿Cuáles son las diferencias entre `–squash` y` –no-ff –no-commit`?

¿Cuál debería uno usar para ocultar microcompromisos?

¿Es la única diferencia entre git merge --squash y git merge --no-ff --no-commit la denegación de los otros padres?

Las diferencias

Estas opciones existen para propósitos separados. Tu repository termina de manera diferente.

Supongamos que su repository es así después de que haya terminado de desarrollar en la twig de tema:

enter image description here

--squash

Si git merge --squash topic; git commit -m topic compra master y luego git merge --squash topic; git commit -m topic git merge --squash topic; git commit -m topic , obtienes esto:

enter image description here

--no-ff --no-commit

En cambio, si haces git merge --no-ff --no-commit; git commit -m topic git merge --no-ff --no-commit; git commit -m topic , obtienes esto:

enter image description here

Ocultando micro-commits

Si realmente desea ocultar (me refiero a eliminar de su repository) sus microcompromisos, use --squash . Porque, como puede ver en las imágenes de arriba, en realidad no está ocultando sus microcompromisos si no los aplasta. Además, generalmente no empuja sus twigs temáticas al mundo. Las twigs temáticas son para que el tema madure.

Si desea que su historial tenga todos sus microcompromisos, pero déjelos en otra línea de desarrollo (la línea verde en las imágenes de arriba), use --no-ff --no-commit . Pero recuerde que a) esta no es una twig, yb) realmente no significa nada en Git porque es solo otro padre de su compromiso.

Consulte las ramificaciones de Git: qué twig es si realmente quiere entender.