76 votes

Quelles sont les différences entre `--squash` et `--no-ff --no-commit` ?

Lequel doit-on utiliser pour masquer les micro-engagements ?

La seule différence entre git merge --squash y git merge --no-ff --no-commit le refus des autres parents ?

76voto

Yasushi Shoji Points 1185

Les différences

Ces options existent à des fins distinctes. Votre référentiel se termine différemment.

Supposons que votre dépôt ressemble à ceci après que vous ayez fini de développer sur la branche topic :

enter image description here


--squash

Si vous vérifiez le master, puis git merge --squash topic; git commit -m topic vous obtenez ceci :

enter image description here


--no-ff --no-commit

Au lieu de cela, si vous faites git merge --no-ff --no-commit; git commit -m topic vous obtenez ceci :

enter image description here

Cacher les micro-engagements

Si vous voulez vraiment vous cacher (je veux dire supprimer de votre référentiel) vos micro-commits, utilisez --squash . Parce que, comme vous pouvez le voir dans les images ci-dessus, vous ne cachez pas vraiment vos micro-commissions si vous ne les écrasez pas. De plus, vous n'avez pas l'habitude de pousser vos branches de sujet vers le monde. Les branches de sujet servent à faire mûrir le sujet.

Si vous voulez que votre historique contienne tous vos micro-engagements, mais les laisse dans une autre ligne de développement (la ligne verte dans les images ci-dessus), utilisez --no-ff --no-commit . Mais n'oubliez pas que a) ce n'est pas une branche, et que b) cela ne veut rien dire dans Git car c'est juste un autre parent de votre commit.

Veuillez vous référer à Branchements Git - Qu'est-ce qu'un branchement ? si vous voulez vraiment comprendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X