En quoi est-ce que fetch est différent de pull et comment la fusion est-elle différente de celle de rebase?

Je ne peux pas comprendre ça. Je lis beaucoup sur le web et les livres et quelque chose ne rest pas dans ma tête. Quelqu’un peut-il s’il vous plaît me donner la version factice de ce qui suit:

  • Git Fetch vs Pull
  • Git fusionner vs rebase

chercher vs tirer

fetch télécharge toutes les modifications de la twig distante *, en mettant à jour les données de votre référentiel, mais en laissant votre twig locale * inchangée.

pull effectuera une fetch et merge les modifications dans votre twig locale.

Quelle est la différence? pull met à jour votre twig locale avec les modifications de la twig tirée. Un fetch ne fait pas avancer votre twig locale.

fusionner vs rebase

Compte tenu de l’histoire suivante:

           C --- D --- E local
          /
     A --- B --- F --- G à distance

merge joint deux historiques de développement ensemble. Pour ce faire, il relit les modifications survenues sur votre twig locale après divergence au-dessus de la twig distante et enregistre le résultat dans une nouvelle validation. Cette opération préserve l’ascendance de chaque commit.

L’effet d’une merge sera:

           C --- D --- E local
          / \
     A --- B --- F --- G --- H à distance

rebase prendra les commits existant dans votre twig locale et les rebase sur la twig distante. Cette opération ré-écrit les ancêtres de vos commits locaux.

L’effet d’une rebase sera:

                   C '- D' - E 'local
                  /
     A --- B --- F --- G à distance

Quelle est la différence? Une merge ne modifie pas l’ascendance des commits. Une rebase réécrit l’ascendance de vos commits locaux.

* Cette explication suppose que la twig actuelle est une twig locale et que la twig spécifiée comme argument pour fetch , pull , merge ou rebase est une twig distante. C’est le cas habituel. pull , par exemple, téléchargera les modifications de la twig spécifiée , mettra à jour votre référentiel et merge les modifications dans la twig en cours.

Chercher vs tirer

Git fetch met simplement à jour vos données de repo, mais un Git Pull effectuera essentiellement une récupération, puis fusionnera la twig tirée

Quelle est la différence entre ‘git pull’ et ‘git fetch’?


Fusionner vs rebase

depuis Atlassian SourceTree Blog, Merge ou Rebase :

La fusion réunit deux lignes de développement tout en préservant l’ascendance de chaque historique de validation.

En revanche, le rebasage unifie les lignes de développement en réécrivant les modifications à partir de la twig source afin qu’elles apparaissent comme des enfants de la twig de destination, en prétendant effectivement que ces validations ont été écrites au-dessus de la twig de destination.

Découvrez également Learn Git Branching , un jeu sympa qui vient d’être publié sur HackerNews ( lien vers le post ) et qui vous apprend beaucoup de techniques de twigment et de fusion. Je crois que ce sera très utile dans cette affaire.

tirer vs chercher :

La façon dont je comprends cela, c’est que git pull est simplement un git fetch suivi de git merge . C’est-à-dire que vous récupérez les modifications depuis une twig distante, puis les fusionnez dans la twig en cours.


fusionner vs rebase :

Une fusion fera comme le dit la commande; fusionner les différences entre la twig actuelle et la twig spécifiée (dans la twig en cours). Si la commande git merge another_branch elle fusionnera another_branch dans la twig en cours.

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 twig actuelle et une another_branch . Ie point avant que les twigs ne divergent. Ensuite, git déplacera ce point divergent à la tête de l’autre another_branch . Enfin, tous les commits dans la twig courante depuis le sharepoint divergence original sont rejoués depuis le nouveau point divergent. Cela crée un historique très propre, avec moins de twigs et de fusions.

Cependant, ce n’est pas sans pièges! Étant donné que l’historique de la version est “réécrit”, vous ne devriez le faire que si les validations existent uniquement dans votre repository git local. C’est-à-dire: ne jamais faire cela si vous avez poussé les commits vers un repo 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

En fait, j’utilise beaucoup rebase, mais en général, c’est en combinaison avec pull:

 git pull --rebase 

va chercher les modifications à distance, puis rebase au lieu de fusionner. C’est-à-dire que tous vos commits locaux seront rejoués la dernière fois que vous avez effectué un tirage. Je trouve cela beaucoup plus propre que de faire un tirage normal avec la fusion, ce qui créera un commit supplémentaire avec les fusions.

Fusionner – La twig HEAD générera un nouvel commit, préservant l’ascendance de chaque historique de validation. L’historique peut être pollué si des validations de fusion sont effectuées par plusieurs personnes travaillant en parallèle sur la même twig.

Rebase – Réécrit les modifications d’une twig sur une autre sans créer de nouvelle validation. L’historique du code est simplifié, linéaire et lisible, mais il ne fonctionne pas avec les requêtes d’extraction, car vous ne pouvez pas voir les modifications mineures apscopes par quelqu’un.

J’utiliserais git merge pour gérer le workflow 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 est plus approprié. Pour plus de détails, assurez-vous de consulter cet article de fusion ou de rebase .