Une autre question a dit git pull
est comme un git fetch
+ git merge
.
Mais quelle est la différence entre git pull
VS git fetch
+ git rebase
?
git
git-rebase
git-pull
git-fetch
Michael
la source
la source
Réponses:
Il devrait être assez évident d'après votre question que vous ne posez en fait que la différence entre
git merge
etgit rebase
.Supposons donc que vous soyez dans le cas commun - vous avez effectué un certain travail sur votre branche principale et vous tirez de l'origine, qui a également effectué un certain travail. Après la récupération, les choses ressemblent à ceci:
Si vous fusionnez à ce stade (le comportement par défaut de git pull), en supposant qu'il n'y a pas de conflits, vous vous retrouvez avec ceci:
Si d'un autre côté vous avez fait le rebase approprié, vous vous retrouveriez avec ceci:
Le contenu de votre arbre de travail devrait finir de la même manière dans les deux cas; vous venez de créer une histoire différente qui y mène . Le rebase réécrit votre historique, donnant l'impression que vous aviez validé par-dessus la nouvelle branche principale d'origine (
R
), au lieu de l'endroit où vous l'aviez initialement validé (H
). Vous ne devez jamais utiliser l'approche de rebase si quelqu'un d'autre s'est déjà retiré de votre branche principale.Enfin, notez que vous pouvez réellement configurer
git pull
une branche donnée pour utiliser le rebase au lieu de la fusion en définissant le paramètre configbranch.<name>.rebase
sur true. Vous pouvez également le faire pour une seule traction en utilisantgit pull --rebase
.la source
TLDR:
git pull
est comme courirgit fetch
alorsgit merge
git pull --rebase
est commegit fetch
alorsgit rebase
En réponse à votre première déclaration,
git pull
c'est comme ungit fetch
+git merge
.(Réf: https://git-scm.com/docs/git-pull )
Pour votre deuxième déclaration / question:
«Mais quelle est la différence entre
git pull
VSgit fetch
+git rebase
»Encore une fois, de la même source:
git pull --rebase
Maintenant, si vous vouliez demander
«la différence entre
merge
etrebase
»cela est également répondu ici:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(la différence entre la modification de la façon dont l'historique des versions est enregistré)
la source
git fetch + git rebase
fonctionnement des commandes à partir de maintenant. Il n'y a plus ou moins de conflit sur notre arbre git à partir de maintenant :)