web-dev-qa-db-fra.com

Fusionner la fusion avec la validation normale

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: SmartGit commits type

Sur le graphique ci-dessous, vous pouvez voir mon exemple de sortie de graphique SmartGit, contenant:

  • unique master branche
  • Une branche fusionnée pour maîtriser avec merge commit option
  • Une branche fusionnée avec simple commit option

Une 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.

git tree

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?

17
Tomas

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

Fusionner la fusion (plusieurs parents):

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

Simple commit (un parent, "squash"):

Il fusionne deux branches avec --squash option, la commande utilisée est git merge branchname --squash.

- 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
24
Marina Liu

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.

0
jsina