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.
pulleffectuera une fetchet en plus mergeles modifications dans votre succursale locale.
Quelle est la différence? pullmet à jour votre branche locale avec les modifications de la branche extraite. A fetchne fait pas avancer votre succursale locale.
Compte tenu de l'histoire suivante:
C --- D --- E local
/
A --- B --- F --- G à distance
mergejoint 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 mergetestament sera:
C --- D --- E local
/ \
A --- B --- F --- G --- H à distance
rebaseprendra 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 rebasetestament sera:
C '- D' - E 'local
/
A --- B --- F --- G à distance
Quelle est la différence? A mergene 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 rebaseest 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 mergeles 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 pullc'est simplement un git fetchsuivi 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_branchfusionnera another_branchdans 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 mergepour 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 rebasec'est plus approprié. Pour plus de détails, consultez cet article sur la fusion ou le rebase .