13853 Stimmen

Was ist der Unterschied zwischen "git pull" und "git fetch"?

Was sind die Unterschiede zwischen git pull y git fetch ?

439 Stimmen

Ich habe diesen gut geschriebenen Artikel über git fetch und git pull gefunden, der es wert ist, gelesen zu werden: longair.net/blog/2009/04/16/git-fetch-and-merge

70 Stimmen

Unser alternativer Ansatz hat sich git fetch; git reset --hard origin/master als Teil unseres Arbeitsablaufs. Es blendet lokale Änderungen aus, hält Sie mit dem Master auf dem Laufenden, stellt aber sicher, dass Sie nicht einfach neue Änderungen über die aktuellen Änderungen ziehen und ein Durcheinander verursachen. Wir verwenden es schon eine Weile und es fühlt sich in der Praxis viel sicherer an. Stellen Sie nur sicher, dass Sie alle laufenden Arbeiten zuerst hinzufügen/übertragen/verstecken!

40 Stimmen

Vergewissern Sie sich, dass Sie wissen, wie man git stash richtig verwendet. Wenn du nach "pull" und "fetch" fragst, dann ist vielleicht auch "stash" erklärungsbedürftig...

434voto

Gerardo Punkte 6979

Es hat mich ein wenig Überwindung gekostet, den Unterschied zu verstehen, aber hier ist eine einfache Erklärung. master auf Ihrem localhost ist eine Verzweigung.

Wenn Sie ein Repository klonen, holen Sie das gesamte Repository auf Ihren lokalen Rechner. Das bedeutet, dass Sie zu diesem Zeitpunkt einen Origin/Master-Zeiger auf HEAD und Master, die auf denselben HEAD .

Wenn Sie mit der Arbeit beginnen und Übertragungen vornehmen, schieben Sie den Master-Zeiger auf HEAD + Ihre Commits. Aber der Origin/Master-Zeiger zeigt immer noch auf das, was er war, als Sie geklont haben.

Der Unterschied wird also sein:

  • Wenn Sie eine git fetch werden einfach alle Änderungen aus dem entfernten Repository geholt ( GitHub ) und verschieben Sie den Ursprung/Master-Zeiger auf HEAD . In der Zwischenzeit verweist Ihr lokaler Zweigmaster weiterhin auf die Stelle, an der er sich befindet.
  • Wenn Sie eine git pull fetch (wie zuvor erklärt) und fügt alle neuen Änderungen in Ihren Master-Zweig ein und verschiebt den Zeiger nach HEAD .

17 Stimmen

Origin/master ist ein lokaler Zweig, der eine KOPIE von master auf origin ist. Wenn Sie etwas holen, aktualisieren Sie local:/origin/master. Wenn man erst einmal verstanden hat, dass alles in Git ein Branch ist, macht das sehr viel Sinn und ist eine sehr mächtige Methode, um verschiedene Changesets zu pflegen, schnelle lokale Branches zu erstellen, zu mergen und zu rebasen und generell einen großen Nutzen aus dem billigen Branching-Modell zu ziehen.

302voto

Snowcrash Punkte 73122

Kurz gefasst

git fetch ist vergleichbar mit pull aber nicht zusammenführt, d.h. er holt sich entfernte Aktualisierungen ( refs y objects ), aber Ihr Standort bleibt derselbe (d. h. origin/master wird aktualisiert, aber master bleibt gleich) .

git pull wird von einer Fernbedienung heruntergezogen und sofort zusammengeführt.

Mehr

git clone klont ein Repository.

git rebase speichert Dinge aus dem aktuellen Zweig, die nicht im Upstream-Zweig enthalten sind, in einem temporären Bereich. Ihr Zweig ist nun derselbe wie vor Beginn Ihrer Änderungen. So, git pull -rebase zieht die entfernten Änderungen heran, spult Ihren lokalen Zweig zurück und überspielt Ihre Änderungen nach und nach auf Ihren aktuellen Zweig, bis Sie auf dem neuesten Stand sind.

Auch, git branch -a zeigt Ihnen genau, was in all Ihren Zweigstellen - lokal und remote - vor sich geht.

Dieser Blogbeitrag war nützlich:

Der Unterschied zwischen git pull, git fetch und git clone (und git rebase) - Mike Pearce

und Abdeckungen git pull , git fetch , git clone y git rebase .

UPDATE

Ich dachte, ich aktualisiere das mal, um zu zeigen, wie man das in der Praxis anwendet.

  1. Aktualisieren Sie Ihr lokales Repository vom entfernten Repository aus (aber führen Sie es nicht zusammen):

     git fetch 
  2. Nach dem Herunterladen der Updates sehen wir uns die Unterschiede an:

     git diff master origin/master 
  3. Wenn Sie mit diesen Aktualisierungen zufrieden sind, dann fügen Sie sie zusammen:

     git pull

Anmerkungen:

Zu Schritt 2: Weitere Informationen zu Unterschieden zwischen lokalen und entfernten Standorten finden Sie unter: Wie vergleicht man einen lokalen Git-Zweig mit seinem entfernten Zweig?

Zu Schritt 3: Es ist wahrscheinlich genauer (z. B. bei einem sich schnell ändernden Repo), eine git rebase origin hier. Siehe @Justin Ohms Kommentar in einer anderen Antwort.

Siehe auch: http://longair.net/blog/2009/04/16/git-fetch-and-merge/

0 Stimmen

Das untenstehende Update war sehr wichtig. Nachdem wir die Updates heruntergeladen haben, wollen wir die Unterschiede sehen: 'git diff master origin/master'

301voto

thedarkpassenger Punkte 6590

Manchmal hilft eine visuelle Darstellung.

enter image description here

27 Stimmen

Ich denke, das Bild soll zeigen, dass es auch die lokale Repo betrifft. Das heißt, Git Pull ist eine Kombination von Auswirkungen auf die lokale Repo und Arbeitskopie. Im Moment scheint es nur die Arbeitskopie zu beeinflussen.

208voto

Vinko Vrsalovic Punkte 252104
git-pull - Fetch from and merge with another repository or a local branch
SYNOPSIS

git pull   …
DESCRIPTION

Runs git-fetch with the given parameters, and calls git-merge to merge the 
retrieved head(s) into the current branch. With --rebase, calls git-rebase 
instead of git-merge.

Note that you can use . (current directory) as the <repository> to pull 
from the local repository — this is useful when merging local branches 
into the current branch.

Also note that options meant for git-pull itself and underlying git-merge 
must be given before the options meant for git-fetch.

Du würdest ziehen, wenn du die Geschichten zusammenführen willst, du würdest holen, wenn du einfach nur den Codez willst", wie eine Person hier einige Artikel markiert hat.

190voto

Alireza Punkte 92209

OK finden Sie hier einige Informationen über git pull y git fetch damit Sie die tatsächlichen Unterschiede verstehen können... in wenigen einfachen Worten, abrufen. holt sich die neuesten Daten, aber nicht die Code-Änderungen und wird nicht mit Ihrem aktuellen lokalen Zweig-Code durcheinander bringen, aber ziehen die Code-Änderungen zu erhalten und sie in Ihren lokalen Zweig einzubinden, lesen Sie weiter, um weitere Einzelheiten zu erfahren:

Mitnahmewerkzeug

Es werden alle refs y Objekte und alle neuen Zweige in Ihr lokales Repository...

Holen Sie Zweige und/oder Tags (zusammenfassend "refs") aus einem oder mehreren anderen Repositories, zusammen mit den Objekten, die zur Vervollständigung ihrer Historie zu vervollständigen. Zweige mit Fernverfolgung werden aktualisiert (siehe die Beschreibung unten für Möglichkeiten, dieses Verhalten zu steuern).

Standardmäßig wird jedes Tag, das auf die abzurufenden Geschichten verweist geholt; dadurch werden Tags geholt, die auf Zweige verweisen, die an denen Sie interessiert sind. Dieses Standardverhalten kann mit den Optionen die Optionen --tags oder --no-tags oder durch die Konfiguration von remote..tagOpt. Durch die Verwendung einer refspec, die Tags explizit abruft, können Sie auch Tags abrufen, die nicht auf Zweige verweisen, die Sie interessieren interessieren.

git fetch kann entweder von einem einzelnen benannten Repository oder einer URL abrufen oder von mehreren Repositories auf einmal abrufen, wenn ein remotes. in der Konfigurationsdatei vorhanden ist. (Siehe git-config 1 ).

Wenn keine Gegenstelle angegeben ist, wird standardmäßig die Ursprungsgegenstelle verwendet, es sei denn, es gibt einen Upstream-Zweig, der für den aktuellen Zweig konfiguriert ist.

Die Namen der abgerufenen Referenzen zusammen mit den Objektnamen auf die sie zeigen, werden in .git/FETCH_HEAD geschrieben. Diese Informationen können Skripten oder anderen Git-Befehlen, wie git-pull, verwendet werden.


Git-Pull

Es werden die Änderungen aus remote zum aktuelle Branche in lokalen...

Fügt Änderungen aus einem entfernten Repository in den aktuellen Zweig ein. In seinem Standardmodus ist git pull eine Abkürzung für git fetch, gefolgt von git merge FETCH_HEAD.

Genauer gesagt: git pull führt git fetch mit den angegebenen Parametern und ruft git merge auf, um die abgerufenen Zweigköpfe mit dem aktuellen Zweig zusammenzuführen. Mit --rebase wird git rebase anstelle von git merge ausgeführt.

sollte der Name eines entfernten Repositorys sein, wie er an git-fetch 1 . kann eine beliebige Remote-Referenz benennen (z. B., der Name eines Tags) oder sogar eine Sammlung von refs mit entsprechenden Remote-Tracking-Zweigen (z.B. refs/heads/ :refs/remotes/origin/ ), aber normalerweise ist es der Name eines Zweigs im entfernten Repository.

Die Standardwerte für und werden aus der Datei "remote"- und "merge"-Konfiguration für den aktuellen Zweig gelesen, die durch git-branch --track.


Ich erstelle auch die visuell unten, um Ihnen zu zeigen, wie git fetch y git pull zusammenarbeiten...

git pull and git fetch

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X