Dans git, Quelle est la différence entre merge --squash et rebase?
je suis nouveau à git et j'essaie de comprendre la différence entre un squash et un rebase. D'après ce que j'ai compris, vous exécutez un squash en faisant un rebase.
3 réponses
les deux git merge --squash
et git rebase --interactive
peuvent produire une propagation" écrasée".
Mais ils servent à des fins différentes.
va produire une propagation écrasée sur la branche de destination, sans marquer aucune relation de fusion.
(Note: il ne produit pas de s'engager tout de suite: vous avez besoin d'un autre git commit -m "squash branch"
)
Ceci est utile si vous voulez jeter la branche source complètement, en allant de (schéma tiré de ainsi question ):
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
à:
git merge --squash tmp
git commit -m "squash tmp"
X-------------------G stable
/
a---b---c---d---e---f---g tmp
puis supprimer tmp
branche.
replace une partie ou la totalité de vos commits sur une nouvelle base, vous permettant de squash (ou plus récemment "réparer", voir ce ainsi question ), allant directement à:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
si vous choisissez d'écraser toutes les commissions de tmp
(mais, contrairement à merge --squash
, vous pouvez choisir de rejouer certains, et d'écraser d'autres).
donc les différences sont:
-
merge
ne touche pas votre branche source (tmp
ici) et crée une commit unique où vous vouloir. -
rebase
vous permet de continuer sur la même branche source (toujourstmp
) avec:- "1519200920 une" nouvelle base
- une histoire plus propre
Merge squash fusionne un arbre (une séquence de commits) en une seule commit. Qui est, courges , toutes les modifications apportées à n s'engage dans un seul commit.
Rebasage est re-fonder, c'est le choix d'une nouvelle base (parent commettre) pour un arbre. Peut-être que le terme mercuriel pour ceci est plus clair: ils appellent cela la transplantation parce que c'est juste que: ramasser un nouveau terrain (parent commit, root) pour un arbre.
Lorsque vous faites un rebase interactif, vous avez le choix entre squash, pick, edit ou skip les commits que vous allez rebase.
Espère que c'était clair!
Merge commits: conserve toutes les commits dans votre branche et les entrelace avec commits sur la branche de base
Merge Squash: conserve les changements mais omet l'individu commet de l'histoire
Rebase: cela déplace la branche caractéristique entière pour commencer sur la pointe de la branche principale, incorporant effectivement toutes les nouvelles commits dans le maître
plus sur ici