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
?
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
?
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
et git 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:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
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:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Si d'un autre côté vous avez fait le rebase approprié, vous vous retrouveriez avec ceci:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
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 config branch.<name>.rebase
sur true. Vous pouvez également le faire pour une seule traction en utilisant git pull --rebase
.
git pull
est comme courir git fetch
alors git merge
git pull --rebase
est comme git fetch
alorsgit rebase
git pull
c'est comme un git fetch
+ git merge
.
"Dans son mode par défaut, git pull est un raccourci pour
git fetch
suivi degit merge
FETCH_HEAD" Plus précisément,git pull
s'exécutegit fetch
avec les paramètres donnés, puis appellegit merge
pour fusionner les têtes de branche récupérées dans la branche actuelle "
(Réf: https://git-scm.com/docs/git-pull )
«Mais quelle est la différence entre git pull
VS git fetch
+ git rebase
»
Encore une fois, de la même source:
git pull --rebase
"Avec --rebase, il exécute git rebase au lieu de git merge."
«la différence entre merge
et rebase
»
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é)
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 :)