web-dev-qa-db-fra.com

Différences entre Git Merge --squash et --no-commit

Comme le titre l'indique, je ne suis pas vraiment clair sur les différences entre un git merge --squash et un git merge --no-commit.

Pour autant que je comprends la page d'aide de git merge, les deux commandes me laisseraient dans un arbre de travail mis à jour, où il est toujours possible de modifier puis de faire un commit final (ou plusieurs commits).

Quelqu'un pourrait-il clarifier les différences de ces 2 options? Quand utiliserais-je l'un au lieu de l'autre?

55
quaylar
git merge --no-commit

C'est comme une fusion normale mais ne crée pas de fusion-commit. Ce commit sera un commit de fusion: lorsque vous regardez l'historique, votre commit apparaîtra comme une fusion normale.

git merge --squash

Cela fusionnera les modifications dans votre arborescence de travail sans créer de validation de fusion. Lorsque vous validez les modifications fusionnées, cela ressemblera à une nouvelle validation "normale" sur votre branche: sans validation de fusion dans l'historique. C'est presque comme si vous aviez fait le choix parmi tous les changements fusionnés.

75
ralphtheninja