Lequel devrait-on utiliser pour cacher les micro-engagements?
Est la seule différence entre git merge --squash
et git merge --no-ff --no-commit
le déni des autres parents?
Ces options existent à des fins distinctes. Votre référentiel se termine différemment.
Supposons que votre référentiel soit comme ceci une fois que vous avez terminé de développer sur la branche de sujet:
--squash
Si vous passez à la caisse maître puis git merge --squash topic; git commit -m topic
, vous obtenez ceci:
--no-ff --no-commit
Au lieu de cela, si vous faites git merge --no-ff --no-commit; git commit -m topic
, vous obtenez ceci:
Si vous voulez vraiment cacher (je veux dire supprimer de votre dépôt) vos micro-commits, utilisez --squash
. Parce que, comme vous pouvez le voir sur les images ci-dessus, vous ne cachez pas vraiment vos micro-commits si vous ne courez pas. De plus, vous ne poussez généralement pas vos branches de sujet dans le monde. Les branches de sujet permettent au sujet de mûrir.
Si vous voulez que votre historique contienne tous vos micro-commits, mais laissez-les 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 b) ne signifie vraiment rien dans Git car c'est juste un autre parent de votre commit.
Veuillez vous référer à Git Branching - What a Branch Is si vous voulez vraiment comprendre.