webentwicklung-frage-antwort-db.com.de

Git Pull VS Git holen Git Rebase

Eine andere Frage sagte git pull ist wie ein git fetch + git merge.

Aber was ist der Unterschied zwischen git pull VS git fetch + git rebase?

282
michael

Aus Ihrer Frage sollte ziemlich offensichtlich sein, dass Sie tatsächlich nur nach dem Unterschied zwischen git merge Und git rebase Fragen.

Nehmen wir also an, Sie sind im allgemeinen Fall - Sie haben einige Arbeiten an Ihrem Master-Zweig ausgeführt und Sie greifen auf Origin zurück, das ebenfalls einige Arbeiten ausgeführt hat. Nach dem Abruf sehen die Dinge so aus:

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

Wenn Sie an dieser Stelle zusammenführen (das Standardverhalten von Git Pull) und davon ausgehen, dass es keine Konflikte gibt, erhalten Sie Folgendes:

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

Wenn Sie andererseits die entsprechende Rebase durchgeführt haben, erhalten Sie Folgendes:

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (Origin/master)

Der Inhalt Ihres Arbeitsbaums sollte in beiden Fällen derselbe sein; Sie haben gerade einen anderen Verlauf erstellt. Die Rebase schreibt Ihren Verlauf neu, sodass es so aussieht, als hätten Sie den neuen Origin-Hauptzweig (R) übernommen, anstatt den ursprünglichen (H). Sie sollten den Rebase-Ansatz niemals verwenden, wenn bereits jemand anderes von Ihrem Master-Zweig abgezogen hat.

Beachten Sie schließlich, dass Sie für einen bestimmten Zweig tatsächlich git pull Einrichten können, um "rebase" anstelle von "merge" zu verwenden, indem Sie den Konfigurationsparameter branch.<name>.rebase Auf "true" setzen. Sie können dies auch für einen einzelnen Pull mit git pull --rebase Tun.

331
Cascabel

TLDR:

git pull ist wie Laufen git fetch dann git merge
git pull --rebase ist wie git fetch dann git rebase

Als Antwort auf Ihre erste Aussage

git pull ist wie ein git fetch + git merge.

"In der Standardeinstellung ist Git Pull die Abkürzung für git fetch gefolgt von git merge FETCH_HEAD "Genauer gesagt git pull rennt git fetch mit den angegebenen Parametern und ruft dann git merge, um die abgerufenen Verzweigungsköpfe in der aktuellen Verzweigung zusammenzuführen "

(Ref: https://git-scm.com/docs/git-pull )


Für Ihre zweite Aussage/Frage:

'Aber was ist der Unterschied zwischen git pull VS git fetch + git rebase '

Wieder aus derselben Quelle:
git pull --rebase

Msgstr "Mit --rebase wird" git rebase "anstelle von" git merge "ausgeführt."


Nun, wenn du fragen wolltest

'der Unterschied zwischen merge und rebase'

das wird auch hier beantwortet:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(der Unterschied zwischen der Änderung des Versionsverlaufs)

3
harshvchawla