git pull VS git fetch git rebase

une Autre question dit git pull est comme un git fetch + git merge .

mais quelle est la différence entre git pull VS git fetch + git rebase ?

270
demandé sur Community 2010-07-29 00:16:04

2 réponses

il devrait être assez évident à partir de votre question que vous posez en fait juste la question sur la différence entre git merge et git rebase .

donc supposons que vous êtes dans le cas commun - vous avez fait un peu de travail sur votre branche principale, et vous tirez de l'origine, qui a également fait un peu de travail. Après le fetch, les choses ressemblent à ceci:

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)

si vous fusionnez à ce point( le comportement par défaut de git pull), en supposant qu'il ne sont pas des conflits, vous finissez 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 se retrouver le même dans les deux cas; vous venez de créer une histoire différente menant à elle . Le rebase réécrit votre histoire, en faisant comme si vous aviez commis en haut de la nouvelle branche principale d'origin ( R ), à la place d'où vous avez initialement commis ( H ). Vous ne devriez jamais utiliser l'approche rebase si quelqu'un d'autre a déjà tiré de votre branche principale.

enfin, notez que vous pouvez en fait configurer git pull pour qu'une branche donnée utilise rebase au lieu de fusionner en définissant le paramètre de configuration branch.<name>.rebase à true. Vous pouvez également faire cela pour une seule traction en utilisant git pull --rebase .

309
répondu Cascabel 2015-02-19 11:04:40

en réponse à votre première déclaration 'git pull est comme un git fetch + git merge. ',

"Dans son mode par défaut, git pull est une abréviation de" git fetch suivie par git fusionner FETCH_HEAD " plus précisément, git pull exécute git fetch avec le paramètres et appels donnés Fusion git pour fusionner la branche récupérée têtes dans la branche courante "

(Réf: https://git-scm.com/docs/git-pull )



Pour votre deuxième énoncé / question: 'mais quelle est la différence entre git pull VS git fetch + git rebase ' Encore une fois, de la même source:

" avec -- rebase, il exécute git rebase au lieu de git merge."



Maintenant, si vous voulez savoir la différence entre fetch et de fusion, c'est-à répondu ici aussi: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (la différence entre modifier la façon dont l'histoire de version est enregistrée et ce qui ne l'est pas)

-1
répondu harshvchawla 2017-06-12 04:52:31