Question git rebase upstream / master vs git pull --rebase master en amont


Y a-t-il une différence entre git rebase upstream/master et git pull --rebase upstream master, et si oui, quoi? La télécommande peut être n'importe quelle télécommande, pas nécessairement en amont.


33
2018-03-24 18:01


origine


Réponses:


le git pull --rebase volonté chercher (git fetch) d'abord, mise à jour upstream/master commet.

Si vous venez de rebase sans pour autant première mise à jour upstream/master, vous n'obtiendrez pas le même résultat.

Je l'illustrer dans "master branche et 'origin/master«ont divergé, comment« dériver »les branches»?"


Serpent mentionne dans les commentaires cette git pull --rebase n'est pas exactement  git fetch && git rebase origin/master.
Voir "qu'est-ce que "git pull --rebase" faire?"

(origin/master)
   |
A--B--C (master)
 \ 
  B'--D (actual origin/master after changing B and force pushing)

Quelle git pull --rebase est, dans ce cas, est:

git fetch origin
git rebase --onto origin/master B master

Ici:

  • origine / master est la nouvelle mise à jour origin/master (B')
  • B est le vieux origin/master (avant une fetch mise à jour)
  • master est la branche à rejouer par dessus origin/master

Cela diffère de git fetch + git rebase origin/master en ce que le pull --rebase commande essaie de savoir quels sont les commits vraiment vos locaux, et qui étaient venus de l'amont dans une fetch précédente.

Pour ce faire, il examine le reflog de la branche de suivi à distance (origin/master, dans ce cas). Ce reflog représente les bouts de successifs git fetch opérations sur origin, dans l'ordre "le plus récent en premier".

Pour chaque entrée de redistribution, (origin/master@{1}, puis ...{2}, et ainsi de suite) il vérifie si cette validation est un ancêtre de la branche en cours master. Dès qu'il en trouve un, il le choisit comme point de départ de la rebase (B dans l'exemple ci-dessus).


33
2018-03-24 18:04