Je ne peux juste pas comprendre ça. J'ai beaucoup lu sur le Web et des livres et quelque chose ne me reste pas dans la tête. Quelqu'un peut-il me donner la version factice de ce qui suit:
- git fetch vs pull
- git merge vs rebase
Je ne peux juste pas comprendre ça. J'ai beaucoup lu sur le Web et des livres et quelque chose ne me reste pas dans la tête. Quelqu'un peut-il me donner la version factice de ce qui suit:
Réponses:
fetch
téléchargera toutes les modifications depuis la branche distante *, mettant à jour les données de votre référentiel, mais laissant votre branche locale * inchangée.
pull
effectuera une fetch
et en plus merge
les modifications dans votre succursale locale.
Quelle est la différence? pull
met à jour votre branche locale avec les modifications de la branche extraite. A fetch
ne fait pas avancer votre succursale locale.
Compte tenu de l'histoire suivante:
C --- D --- E local / A --- B --- F --- G à distance
merge
joint deux histoires de développement ensemble. Pour ce faire, il rejoue les modifications qui se sont produites sur votre branche locale après sa divergence au-dessus de la branche distante et enregistre le résultat dans une nouvelle validation. Cette opération préserve l'ascendance de chaque commit.
L'effet d'un merge
testament sera:
C --- D --- E local / \ A --- B --- F --- G --- H à distance
rebase
prendra les commits qui existent dans votre branche locale et les réappliquera sur la branche distante. Cette opération réécrit les ancêtres de vos commits locaux.
L'effet d'un rebase
testament sera:
C '- D' - E 'local / A --- B --- F --- G à distance
Quelle est la différence? A merge
ne change pas l'ascendance des commits. A rebase
réécrit l'ascendance de vos commits locaux.
*
Cette explication suppose que la branche de courant est une branche locale, et en ce que la branche spécifiée comme argument de fetch
, pull
, merge
, ou rebase
est une branche à distance. C'est le cas habituel. pull
, par exemple, téléchargera toutes les modifications de la branche spécifiée , mettra à jour votre référentiel et merge
les modifications dans la branche actuelle .
Extraire vs Pull
Git fetch met simplement à jour vos données de dépôt, mais un git pull effectuera essentiellement une extraction, puis fusionnera la branche extraite
Quelle est la différence entre 'git pull' et 'git fetch'?
Fusion vs Rebase
à partir du blog Atlassian SourceTree, Fusion ou Rebase :
La fusion réunit deux axes de développement tout en préservant l'ascendance de chaque histoire de commit.
En revanche, le rebasage unifie les lignes de développement en réécrivant les modifications à partir de la branche source afin qu'elles apparaissent comme des enfants de la branche de destination - prétendant en fait que ces commits ont été écrits au-dessus de la branche de destination tout au long.
Découvrez également Learn Git Branching , un jeu sympa qui vient d'être publié sur HackerNews ( lien vers l'article ) et qui enseigne de nombreuses astuces de branchement et de fusion. Je pense que ce sera très utile à cet égard.
git merge <remote>/<branch>
. par exemple, si vous êtes la branche principale et que votre télécommande est nommée origin, vous pouvez le faire git merge origin/master
.
tirer vs récupérer :
La façon dont je comprends cela, c'est que git pull
c'est simplement un git fetch
suivi de git merge
. C'est-à-dire que vous récupérez les modifications à partir d'une branche distante, puis vous les fusionnez dans la branche actuelle.
fusion vs rebase :
Une fusion fera ce que la commande dit; fusionner les différences entre la branche actuelle et la branche spécifiée (dans la branche actuelle). C'est-à-dire que la commande git merge another_branch
fusionnera another_branch
dans la branche actuelle.
Un rebase fonctionne un peu différemment et est plutôt cool. Disons que vous exécutez la commande git rebase another_branch
. Git trouvera d'abord la dernière version commune entre la branche actuelle et another_branch
. C'est-à-dire le point avant que les branches aient divergé. Ensuite, git déplacera ce point divergent vers la tête du fichier another_branch
. Enfin, tous les commits de la branche courante depuis le point divergent d'origine sont rejoués à partir du nouveau point divergent. Cela crée une histoire très propre, avec moins de branches et de fusions.
Cependant, ce n'est pas sans pièges! Puisque l'historique des versions est "réécrit", vous ne devez le faire que si les commits existent uniquement dans votre dépôt git local. Autrement dit: ne faites jamais cela si vous avez poussé les commits vers un dépôt distant.
L'explication sur le rebasage donnée dans ce livre en ligne est assez bonne, avec des illustrations faciles à comprendre.
tirer avec rebasage au lieu de fusionner
J'utilise en fait beaucoup rebase, mais c'est généralement en combinaison avec pull:
git pull --rebase
récupérera les modifications distantes, puis rebasera au lieu de fusionner. C'est-à-dire qu'il rejouera tous vos commits locaux depuis la dernière fois que vous avez effectué un pull. Je trouve cela beaucoup plus propre que de faire un pull normal avec la fusion, ce qui créera un commit supplémentaire avec les fusions.
Merge - La branche HEAD générera un nouveau commit, préservant l'ascendance de chaque historique de commit. L'histoire peut devenir polluée si les validations de fusion sont effectuées par plusieurs personnes travaillant sur la même branche en parallèle.
Rebase - Réécrit les modifications d'une branche sur une autre sans créer un nouveau commit. L'historique du code est simplifié, linéaire et lisible, mais il ne fonctionne pas avec les demandes d'extraction, car vous ne pouvez pas voir les modifications mineures apportées par quelqu'un.
J'utiliserais git merge
pour traiter le flux de travail basé sur les fonctionnalités ou si je ne suis pas familier avec le rebase. Mais, si je veux une histoire plus propre et linéaire, alors git rebase
c'est plus approprié. Pour plus de détails, consultez cet article sur la fusion ou le rebase .