web-dev-qa-db-fra.com

git pull VS git chercher git rebase

ne 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?

282
michael

Votre question devrait indiquer assez clairement que vous vous interrogez simplement sur la différence entre git merge et git rebase.

Supposons donc que vous êtes dans le cas habituel - vous avez travaillé sur votre branche principale et extrait de Origin, qui a également effectué du travail. Après l'extraction, 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 ait aucun conflit, vous vous retrouvez avec ceci:

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

Si par contre vous faisiez 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 aboutir au même résultat dans les deux cas; vous venez de créer un historique différent menant à celui-ci. La nouvelle base réécrit votre historique, donnant l’impression que vous avez commis au-dessus de la nouvelle branche principale d’Origine (R), au lieu de celui où vous avez initialement commis (H). Vous ne devriez jamais utiliser l'approche de base si quelqu'un d'autre a déjà retiré de votre branche principale.

Enfin, notez que vous pouvez réellement 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 sur true. Vous pouvez également le faire pour un seul pull en utilisant git pull --rebase.

331
Cascabel

TLDR:

git pull revient à exécuter git fetch puis git merge
git pull --rebase est comme git fetch alors git rebase

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 un raccourci pour git fetch suivi de git merge FETCH_HEAD" Plus précisément, git pull exécute git fetch avec les paramètres donnés puis appelle git merge fusionner les têtes de branches récupérées dans la branche actuelle "

(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 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."


Maintenant, si vous vouliez demander

'la différence entre merge et rebase'

on y répond aussi:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(différence entre la modification de l’enregistrement de l’historique des versions)

3
harshvchawla