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.
Le git pull --rebase
va récupérer (git fetch
) d'abord, en mettant à jour upstream/master
valide.
Si vous venez de rebaser sans mettre à jour d'abord upstream/master
, vous n'obtiendrez pas le même résultat.
Je l'illustre dans la branche " master
et 'Origin/master
'ont divergé, comment' dériver 'les branches'? "
SnakE mentionne dans les commentaires que 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)
Quoi git pull --rebase
est, dans ce cas:
git fetch Origin
git rebase --onto Origin/master B master
Ici:
Origin/master
(B'
)B
est l'ancien Origin/master
(avant une extraction mise à jour)master
est la branche à relire au-dessus de Origin/master
Cela diffère de git fetch
+ git rebase Origin/master
en ce que le pull --rebase
commande essaie de savoir quels commits sont vraiment vos commits locaux, et qui sont venus de l'amont lors d'une extraction précédente.
Pour ce faire, il regarde le reflog de la branche de suivi à distance (
Origin/master
, dans ce cas). Ce reflog représente les astuces degit fetch
opérations surOrigin
, dans l'ordre "le plus récent en premier".Pour chaque entrée de reflog, (
Origin/master@{1}
, puis...{2}
, etc.), il vérifie si cette validation est un ancêtre de la tête de branche actuellemaster
. Dès qu'il en trouve un, il le choisit comme point de départ pour le rebase (B
dans l'exemple ci-dessus).