Gibt es einen Unterschied zwischen git rebase upstream/master
und git pull --rebase upstream master
, und wenn ja, was? Die Fernbedienung könnte irgendeine Fernbedienung sein, nicht unbedingt stromaufwärts.git Rebase stromaufwärts/Master vs git Pull --rebase stromaufwärts Master
Antwort
Die git pull --rebase
wird fetch (git fetch
) zuerst, Aktualisierung upstream/master
commits.
Wenn Sie einfach ohne erste Aktualisierung upstream/master
rebase, erhalten Sie nicht das gleiche Ergebnis.
ich zeigen es in "master
branch and 'origin/master
' have diverged, how to 'undiverge' branches'?"
SnakE erwähnt in the comments dass git pull --rebase
nicht genaugit fetch && git rebase origin/master
ist.
Siehe "what does "git pull --rebase
" do?"
(origin/master)
|
A--B--C (master)
\
B'--D (actual origin/master after changing B and force pushing)
Welche git pull --rebase
hat, in diesem Fall ist:
git fetch origin
git rebase --onto origin/master B master
hier:
- origin/master die neue, aktualisierte
origin/master
(B'
) ist B
ist die alteorigin/master
(vor ein upgedatet Fetch)master
ist der Zweig auf derorigin/master
replay unterscheidet sich diese von git fetch
+ git rebase origin/master
, dass der pull --rebase
Befehl, um herauszufinden versucht, welche Commits wirklich Ihrem lokalen sind diejenigen, die von stromaufwärts in einem früheren Fetch gekommen waren.
Um dies zu tun, sieht es sich die Reflog der Remote-Tracking-Zweig (in diesem Fall
origin/master
). Dieser Reflog stellt die Spitzen der aufeinanderfolgenden Operationengit fetch
auforigin
in der Reihenfolge "neueste erste" dar.Für jeden Reflog-Eintrag (
origin/[email protected]{1}
, dann...{2}
usw.) wird überprüft, ob dieses Commit ein Vorgänger des aktuellen Zweigkopfsmaster
ist. Sobald es einen gefunden hat, wählt es es als Ausgangspunkt für die Rebase (B
im obigen Beispiel).
Also ist 'git pull --rebase upstream master 'analog zu' git fetch upstream && git rebase upstream/master'? – Dennis
@Dennis ziemlich, ja. – VonC
Eigentlich nein. Stellen Sie sich vor, Sie haben die Geschichte "A-B" gezogen und eine Änderung darüber vorgenommen, "A-B-C". Dann änderte jemand anders "B" zu "B" und schob ihre Änderungen so, dass der Ursprung jetzt "A-B" -d ist. Wenn Sie nun 'git fetch && git rebase origin/master' ausführen, wird die Rebase mit Konflikten fehlschlagen. Aber 'git pull --rebase' wird es herausfinden und mit 'A-B'-D-C' enden. Unter "pull --rebase" passiert definitiv etwas Magie. Edit: [Korrekturlink] (http://gitolite.com/git-pull--rebase.html) – SnakE