Au quotidien, j’utilise SmartGit
comme client de choix. Les membres de mon équipe restent cependant fidèles à l’interface graphique native de Git. Nous avons découvert quelques différences dans l’apparence de nos commits de fusion.
Ce sont des options que SmartGit
donne quand il lui est demandé de fusionner une branche:
Sur le graphique ci-dessous, vous pouvez voir mon exemple de sortie de graphique SmartGit, contenant:
master
branchemerge commit
optionsimple commit
optionUne des branches (with_merge_branch
) visualise l’opération de fusion en joignant une branche à un maître via une ligne. Deuxième (normal_commit_branch
) ne fait pas.
La question est de savoir comment appliquer les deux comportements dans les commandes git natives. C'est à dire. Quelle est la différence entre ces deux commits?
La différence entre les deux types de fusion ne diffère que dans l'historique de validation (comme vous l'avez montré dans le graphique des journaux).
Illustrons par des graphiques. Supposons que l'historique de validation soit comme ci-dessous avant la fusion
A---B---C---D master
\
E---F---G develop
La commande utilisée est git merge branchname
. C'est le moyen par défaut de fusionner deux branches.
Lorsque vous fusionnez develop
branche en master
branche par Fusionner la validation dans SmartGit (git merge develop
), l’historique des commit sera:
A---B---C---D---M master
\ /
E---F---G develop
Il fusionne deux branches avec --squash
option, la commande utilisée est git merge branchname --squash
.
Produisez l’arbre de travail et l’état d’index comme si une fusion avait eu lieu (à l’exception des informations sur la fusion), mais n’effectuiez pas de validation, ne déplaciez pas le HEAD ou n’enregistriez $ GIT_DIR/MERGE_HEAD (pour que la commande suivante git commit crée un fusionner la validation). Cela vous permet de créer une seule validation au-dessus de la branche actuelle, dont l’effet est identique à la fusion d’une autre branche (ou plus dans le cas d’une pieuvre).
Lorsque vous fusionnez develop
branche en master
branche par simple commit dans SmartGit (git merge develop --squash
), il récupère les modifications de develop
branche en master
branche sous la forme d’une nouvelle validation ordinaire (comme si une fusion s’était produite), et l’historique de la validation sera le suivant:
A---B---C---D---M master
\
E---F---G develop
merge commits
ne sont que commit
mais la différence est qu’ils ont plusieurs parents. comme vous le savez, les commits peuvent avoir ou non un parent, en fait le merge commit
est le commit
qui a plus d’un parent commit
.