Manchmal haben wir einen Upstream, der einen Zweig, auf den wir angewiesen sind, rebasiert/zurückgespult hat. Dies kann ein großes Problem sein - was zu unsicheren Konflikten für uns führt, wenn wir flussabwärts sind.
Die Magie ist git pull --rebase
Ein normaler git pull ist, so etwas wie dies grob gesagt, (wir eine Fern genannt Herkunft und einen Zweig namens foo in all diesen Beispielen verwenden werden):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
Auf den ersten Blick könnte man denken, dass ein Git-Pull---rebase tut genau dies:
git fetch origin
git rebase origin/foo
Aber das wird nicht helfen, wenn der Upstream-rebase jede „squashin beteiligt g "(was bedeutet, dass sich die Patch-IDs der Commits geändert haben, nicht nur ihre Reihenfolge).
Was bedeutet git pull --rebase muss ein bisschen mehr als das tun. Hier ist eine Erklärung, was es macht und wie.
Sagen wir Ihr Ausgangspunkt ist das:
a---b---c---d---e (origin/foo) (also your local "foo")
Die Zeit vergeht, und Sie haben einige Commits auf Ihre eigene "foo" gemacht:
a---b---c---d---e---p---q---r (foo)
Inzwischen in einem Anfall von Antisoziale Wut, der Upstream-Betreuer hat nicht nur sein "Foo" neu gefestigt, er hat sogar einen oder zwei Squash benutzt. Seine Commit-Kette sieht jetzt so aus:
Ein Git Ziehen an diesem Punkt würde Chaos führen. Sogar ein git fetch; Git Rebase Herkunft/foo würde es nicht schneiden, weil "b" und "c" auf der einen Seite, und committe "b + c" auf der anderen, würde Konflikt. (Und ähnlich mit d, e und d + e).
Was git pull --rebase
der Fall ist, in diesem Fall ist:
git fetch origin
git rebase --onto origin/foo e foo
Dies gibt Ihnen:
Bezogen: [Wann sollte ich git pull --rebase verwenden?] (Http://stackoverflow.com/q/2472254/456814). –
Mögliches Duplikat von [git pull VS git fetch git rebase] (http://stackoverflow.com/questions/3357122/git-pull-vs-git-fetch-git-rebase) –
Nützlicher Link: https: // www. atlassian.com/git/tutorials/rewriting-history/gitrebase –