Was sind die Unterschiede zwischen git pull
und git fetch
?
git
version-control
git-pull
git-fetch
pupeno
quelle
quelle
git fetch; git reset --hard origin/master
Teil unseres Workflows geworden. Es bläst lokale Änderungen weg, hält Sie mit Master auf dem Laufenden, ABER stellt sicher, dass Sie nicht nur neue Änderungen zu aktuellen Änderungen hinzufügen und ein Chaos anrichten. Wir haben es eine Weile benutzt und es fühlt sich in der Praxis viel sicherer an. Stellen Sie nur sicher, dass Sie zuerst alle laufenden Arbeiten hinzufügen / festschreiben / verstauen!Antworten:
Im einfachsten Sinne
git pull
wird agit fetch
gefolgt von agit merge
.Sie können
git fetch
jederzeit eine Option ausführen, um Ihre Remote-Tracking-Zweige unter zu aktualisierenrefs/remotes/<remote>/
.Dieser Vorgang ändert niemals eine Ihrer eigenen lokalen Niederlassungen unter
refs/heads
und ist sicher, ohne Ihre Arbeitskopie zu ändern. Ich habe sogar von Leuten gehört, diegit fetch
regelmäßig in einem Cron-Job im Hintergrund laufen (obwohl ich dies nicht empfehlen würde).A
git pull
ist das, was Sie tun würden, um eine lokale Niederlassung mit ihrer Remote-Version auf den neuesten Stand zu bringen und gleichzeitig Ihre anderen Remote-Tracking-Zweige zu aktualisieren.Git-Dokumentation - Git Pull :
quelle
git pull
wird immer in den aktuellen Zweig zusammengeführt . Sie wählen also den Zweig aus, aus dem Sie ziehen möchten, und ziehen ihn in den aktuellen Zweig. Der From- Zweig kann lokal oder remote sein. Es kann sich sogar um einen Remote-Zweig handeln, der nicht registriert istgit remote
(dh, Sie übergeben eine URL in dergit pull
Befehlszeile)./home/alice/
und dies tue ?git fetch /home/bob
git merge
pull
Kann nicht durch einfetch
Pluszeichen a emuliert werdenmerge
. Ich habe gerade eine Änderung abgerufen, bei der sich nur ein entfernter Verzweigungszeiger ändert, undmerge
weigere mich, etwas zu tun.pull
Auf der anderen Seite spult mein Tracking-Zweig schnell vor.Wenn Sie verwenden
pull
, versucht Git, Ihre Arbeit automatisch für Sie zu erledigen.Es ist kontextsensitiv , sodass Git alle gezogenen Commits in dem Zweig zusammenführt, in dem Sie gerade arbeiten.pull
Die Commits werden automatisch zusammengeführt, ohne dass Sie sie zuerst überprüfen müssen . Wenn Sie Ihre Filialen nicht genau verwalten, kann es häufig zu Konflikten kommen.Wenn Sie dies
fetch
tun, sammelt Git alle Commits aus dem Zielzweig, die in Ihrem aktuellen Zweig nicht vorhanden sind, und speichert sie in Ihrem lokalen Repository . Sie werden jedoch nicht mit Ihrem aktuellen Zweig zusammengeführt . Dies ist besonders nützlich, wenn Sie Ihr Repository auf dem neuesten Stand halten müssen, aber an etwas arbeiten, das beim Aktualisieren Ihrer Dateien möglicherweise kaputt geht. Um die Commits in Ihren Hauptzweig zu integrieren, verwenden Siemerge
.quelle
git fetch
aktualisiert nur Ihr.git/
Verzeichnis (AKA: lokales Repository) und nichts außerhalb.git/
(AKA: Arbeitsbaum). Es ändert nichts an Ihren lokalen Niederlassungen und berührt auch nichtmaster
. Es berührtremotes/origin/master
jedoch (siehegit branch -avv
). Wenn Sie mehr Fernbedienungen haben, versuchen Sie esgit remote update
. Dies ist einegit fetch
für alle Fernbedienungen in einem Befehl..git/refs/remotes/origin/
..git
? Was ist der beabsichtigte Nutzen und was soll ich danach tun?Es ist wichtig, die Designphilosophie von git der Philosophie eines traditionelleren Versionsverwaltungswerkzeugs wie SVN gegenüberzustellen.
Subversion wurde mit einem Client / Server-Modell entworfen und erstellt. Es gibt ein einziges Repository, das der Server ist, und mehrere Clients können Code vom Server abrufen, daran arbeiten und ihn dann wieder auf den Server übertragen. Es wird davon ausgegangen, dass der Client den Server immer dann kontaktieren kann, wenn er eine Operation ausführen muss.
Git wurde entwickelt, um ein verteilteres Modell zu unterstützen, ohne dass ein zentrales Repository erforderlich ist (obwohl Sie sicherlich eines verwenden können, wenn Sie möchten). Außerdem wurde git so konzipiert, dass der Client und der "Server" nicht gleichzeitig online sein müssen. Git wurde so konzipiert, dass Personen mit einem unzuverlässigen Link sogar Code per E-Mail austauschen können. Es ist möglich, vollständig getrennt zu arbeiten und eine CD zu brennen, um Code über Git auszutauschen.
Um dieses Modell zu unterstützen, verwaltet git ein lokales Repository mit Ihrem Code sowie ein zusätzliches lokales Repository, das den Status des Remote-Repositorys widerspiegelt. Indem eine Kopie des Remote-Repositorys lokal aufbewahrt wird, kann git die erforderlichen Änderungen herausfinden, auch wenn das Remote-Repository nicht erreichbar ist. Wenn Sie die Änderungen später an eine andere Person senden müssen, kann git sie als eine Reihe von Änderungen ab einem dem Remote-Repository bekannten Zeitpunkt übertragen.
git fetch
ist der Befehl "Meine lokale Kopie des Remote-Repositorys auf den neuesten Stand bringen".git pull
sagt "Bringen Sie die Änderungen im Remote-Repository dahin, wo ich meinen eigenen Code aufbewahre."Normalerweise
git pull
geschieht dies durch agit fetch
, um die lokale Kopie des Remote-Repositorys auf den neuesten zu bringen, und dann die Änderungen in Ihrem eigenen Code-Repository und möglicherweise in Ihrer Arbeitskopie zusammenführen.Beachten Sie, dass sich auf Ihrer Workstation häufig mindestens drei Kopien eines Projekts befinden. Eine Kopie ist Ihr eigenes Repository mit Ihrem eigenen Commit-Verlauf. Die zweite Kopie ist Ihre Arbeitskopie, in der Sie bearbeiten und erstellen. Die dritte Kopie ist Ihre lokale "zwischengespeicherte" Kopie eines Remote-Repositorys.
quelle
remoteName/
von Grund auf Git vorangestellt wird. Dies ist eine sehr gute Lektüre. Sobald Sie ein Verständnis dafür haben, wie Git funktioniert - und es ist wirklich sehr einfach -, macht alles nur Sinn.Hier ist Oliver Steeles Bild davon, wie alles zusammen passt :
Wenn genügend Interesse besteht, könnte ich das Bild möglicherweise aktualisieren, um es hinzuzufügen
git clone
undgit merge
...quelle
git clone
undgit merge
wäre sehr hilfreich!git merge
- es sollte deutlich werden, dass einmerge
separater Anruf NICHT mit einem Anruf identisch ist,pull
da erpull
nur von einem Remote-Zweig zusammengeführt wird und Ihre lokalen Commits in Ihrem lokalen Zweig ignoriert, der den Remote-Zweig verfolgt, von dem abgerufen wird .Ein Anwendungsfall von
git fetch
ist, dass im Folgenden alle Änderungen in der Remote-Verzweigung seit Ihrem letzten Pull angezeigt werden. Sie können also vor dem eigentlichen Pull überprüfen, ob sich die Dateien in Ihrer aktuellen Verzweigung und Arbeitskopie ändern können.Informationen zur Doppel- und Dreifachpunktsyntax im Befehl diff finden Sie unter: https://git-scm.com/docs/git-diff
quelle
git diff ..origin
?git diff ...origin
ist äquivalent zugit diff $(git-merge-base HEAD origin) origin
(siehegit diff [--options] <commit>...<commit> [--] [<path>…]
Abschnitt von kernel.org/pub/software/scm/git/docs/git-diff.html#_description ), der sich von unterscheidetgit diff origin
;git diff ...origin
ist konzeptionell die Änderung, dieorigin
seit der Verzweigung des aktuellen Zweigs vorgenommen wurdeorigin
, währendgit diff origin
auch die Umkehrung der Änderungen enthalten ist, die seit der Verzweigung im aktuellen Zweig vorgenommen wurdenorigin
.git diff origin/master
funktioniert wie unten erwähntEs hat mich ein bisschen gekostet zu verstehen, was der Unterschied war, aber das ist eine einfache Erklärung.
master
In Ihrem lokalen Host befindet sich eine Niederlassung.Wenn Sie ein Repository klonen, rufen Sie das gesamte Repository auf Ihren lokalen Host ab. Dies bedeutet, dass Sie zu diesem Zeitpunkt einen Ursprungs- / Master-Zeiger auf
HEAD
und einen Master-Zeiger auf denselben habenHEAD
.Wenn Sie anfangen zu arbeiten und Commits ausführen, bewegen Sie den Master-Zeiger auf
HEAD
+ Ihre Commits. Der Ursprungs- / Master-Zeiger zeigt jedoch immer noch auf das, was er beim Klonen war.Der Unterschied wird also sein:
git fetch
, werden nur alle Änderungen im Remote-Repository ( GitHub ) abgerufen und der Ursprungs- / Master-Zeiger auf verschobenHEAD
. In der Zwischenzeit zeigt Ihr lokaler Filialleiter immer wieder darauf, wo er sich befindet.git pull
, werden im Grunde genommen (wie zuvor erläutert) neue Änderungen an Ihrem Hauptzweig zusammengeführt und der Zeiger auf verschobenHEAD
.quelle
git fetch
, Änderungen auf dem Remote-Repo sollten buchstäblich in Ihr lokales Repo heruntergeladen, aber NICHT festgeschrieben werden - dh sie müssen noch zu Ihrem lokalen Repo hinzugefügt / festgeschrieben werden.Manchmal hilft eine visuelle Darstellung.
quelle
git pull
als würde der Abruf übersprungen , was natürlich ungenau ist.Kurz
git fetch
ist ähnlich, wirdpull
aber nicht zusammengeführt. dh es ruft Remote-Updates ab (refs
undobjects
), aber Ihr lokales bleibt gleich (dhorigin/master
wird aktualisiert,master
bleibt aber gleich).git pull
wird von einer Fernbedienung heruntergezogen und sofort zusammengeführt.Mehr
git clone
klont ein Repo.git rebase
Speichert Daten aus Ihrer aktuellen Filiale, die sich nicht in der Upstream-Filiale befindet, in einem temporären Bereich. Ihre Filiale ist jetzt dieselbe wie vor Beginn Ihrer Änderungen. Damit,git pull -rebase
wird ziehen Sie die Remote - Änderungen nach unten, zurückspulen Ihre lokale Niederlassung, wiederholen Sie Ihre Änderungen über die Spitze der aktuellen Zweig eins nach dem anderen , bis Sie up-to-date.Außerdem
git branch -a
wird Ihnen genau gezeigt, was mit all Ihren Filialen los ist - lokal und remote.Dieser Blog-Beitrag 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
undgit rebase
.====
AKTUALISIEREN
Ich dachte, ich würde dies aktualisieren, um zu zeigen, wie Sie dies in der Praxis tatsächlich verwenden würden.
Aktualisieren Sie Ihr lokales Repo von der Fernbedienung (aber nicht zusammenführen):
Lassen Sie uns nach dem Herunterladen der Updates die Unterschiede sehen:
Wenn Sie mit diesen Updates zufrieden sind, führen Sie Folgendes zusammen:
Anmerkungen:
Zu Schritt 2: Weitere Informationen zu Unterschieden zwischen lokalen und Fernbedienungen finden Sie unter: Wie vergleiche ich einen lokalen Git-Zweig mit seinem Remote-Zweig?
Zu Schritt 3: Es ist wahrscheinlich genauer (z. B. bei einem sich schnell ändernden Repo),
git rebase origin
hier ein zu machen. Siehe @ Justin Ohms Kommentar in einer anderen Antwort.Siehe auch: http://longair.net/blog/2009/04/16/git-fetch-and-merge/
quelle
git clone
. Ich habe den Tipp in Anführungszeichen gesetzt, da ich davon ausgehe, dass dies bedeuten würde, was auch immer der Meister ist und was jemand "als Zip herunterladen" würde von github.comSie würden ziehen, wenn Sie möchten, dass die Historien zusammengeführt werden. Sie würden abrufen, wenn Sie nur den Codez möchten, da eine Person hier einige Artikel markiert hat.
quelle
git fetch
, werden Änderungen aus dem Repository abgerufen und Ihr lokaler Remote-Zweig aktualisiert. Dies wirkt sich nicht auf Ihren lokalen Zweig aus, der den lokalen Remote-Zweig verfolgt, und wirkt sich daher nicht auf Ihre Arbeitskopie aus. Wenn Sie dies tunmerge
, werden die abgerufenen Änderungen mit Ihrem lokalen Zweig zusammengeführt.Sie können aus einem Remote-Repository abrufen, die Unterschiede anzeigen und dann ziehen oder zusammenführen.
Dies ist ein Beispiel für ein Remote-Repository namens
origin
und einen Zweig namensmaster
Tracking the Remote-Zweigorigin/master
:quelle
Die kurze und einfache Antwort ist , dass
git pull
ist einfach ,git fetch
gefolgt vongit merge
.Es ist sehr wichtig zu beachten , dass
git pull
wird automatisch , ob Sie es mögen oder nicht fusionieren . Dies könnte natürlich zu Zusammenführungskonflikten führen. Angenommen, Ihre Fernbedienung istorigin
und Ihre Niederlassung istmaster
. Wenn Siegit diff origin/master
vor dem Ziehen eine Vorstellung von möglichen Zusammenführungskonflikten haben und Ihre lokale Niederlassung entsprechend vorbereiten können.Neben Ziehen und Schieben, einige Workflows beinhalten
git rebase
, wie diese, die ich aus dem verlinkten Artikel paraphrasieren:Wenn Sie sich in einer solchen Situation befinden, könnten Sie versucht sein
git pull --rebase
. Wenn Sie nicht wirklich wissen, was Sie tun, würde ich davon abraten. Diese Warnung stammt von derman
Seite fürgit-pull
, Version2.3.5
:quelle
git pull --rebase
es in der gegebenen Situation nicht das Richtige ist, ist es richtig, wenn es in zwei Schritten durchgeführt wird? Wenn es das Richtige ist, was ist der zusätzliche Vorteil, wenn Sie es in zwei Schritten tun?rebase
Sie diese Option, wenn Sie an einem lokalen Zweig arbeiten, der noch nicht gepusht wurde. Wenn Sie an einem Zweig arbeiten, der auf der Fernbedienung vorhanden ist,rebase
kann dies zu unangenehmen Problemen führen. Daher sollten Sie einen regulären Zweig bevorzugenmerge
.OK , hier sind einige Informationen zu
git pull
undgit fetch
, damit Sie die tatsächlichen Unterschiede verstehen können. In wenigen einfachen Worten erhält fetch die neuesten Daten, aber nicht die Codeänderungen und wird nicht mit Ihrem aktuellen lokalen Zweigstellencode in Konflikt geraten , sondern ziehen get Der Code ändert sich und führt ihn zu Ihrer lokalen Niederlassung zusammen. Lesen Sie weiter, um weitere Details zu den einzelnen Zweigen zu erhalten:Git holen
Es werden alle Refs und Objekte sowie alle neuen Zweige in Ihr lokales Repository heruntergeladen ...
Git Pull
Es werden die Änderungen von Remote auf den aktuellen Zweig in lokalen ...
Ich erstelle auch das Bild unten, um Ihnen zu zeigen, wie
git fetch
und wie Siegit pull
zusammenarbeiten ...quelle
Diese interaktive grafische Darstellung ist sehr hilfreich, um Git zu verstehen: http://ndpsoftware.com/git-cheatsheet.html
git fetch
"lädt" einfach die Änderungen von der Fernbedienung in Ihr lokales Repository herunter.git pull
lädt die Änderungen herunter und führt sie in Ihrem aktuellen Zweig zusammen. "Im Standardmodusgit pull
ist die Abkürzung fürgit fetch
gefolgt vongit merge FETCH_HEAD
."quelle
Bonus:
Wenn ich in den obigen Antworten von Pull & Fetch spreche, möchte ich einen interessanten Trick teilen:
git pull --rebase
Dieser obige Befehl ist der nützlichste Befehl in meinem Git-Leben, der viel Zeit gespart hat.
Versuchen Sie diesen Befehl, bevor Sie Ihre neuen Commits auf den Server übertragen. Die neuesten Serveränderungen werden automatisch synchronisiert (mit einem Abruf + Zusammenführen), und Ihr Commit wird im Git-Protokoll ganz oben platziert. Sie müssen sich keine Gedanken über manuelles Ziehen / Zusammenführen machen.
Details finden Sie unter: http://gitolite.com/git-pull--rebase
quelle
git pull
und istgit pull --rebase
?Ich möchte eine visuelle Darstellung der Situation haben, um diese Dinge zu erfassen. Vielleicht möchten es auch andere Entwickler sehen, also hier ist meine Ergänzung. Ich bin mir nicht ganz sicher, ob alles korrekt ist. Bitte kommentieren Sie, wenn Sie Fehler finden.
Einige Hauptvorteile für einen abgerufenen Spiegel der Fernbedienung sind:
quelle
git pull
auch eine Zusammenführung durch, dh bis zur Arbeitskopie?Ich habe auch damit zu kämpfen. Tatsächlich bin ich mit einer Google-Suche genau der gleichen Frage hierher gekommen. Das Lesen all dieser Antworten zeichnete schließlich ein Bild in meinen Kopf und ich beschloss, dies zu überprüfen, indem ich den Zustand der 2 Repositorys und 1 Sandbox sowie die im Laufe der Zeit ausgeführten Aktionen betrachtete, während ich mir die Version davon ansah. Also hier ist, was ich mir ausgedacht habe. Bitte korrigieren Sie mich, wenn ich irgendwo etwas durcheinander gebracht habe.
Die drei Repos mit einem Fetch:
Die drei Repos mit einem Zug
Dies half mir zu verstehen, warum ein Abruf ziemlich wichtig ist.
quelle
Der Unterschied zwischen GIT Fetch und GIT Pull lässt sich anhand des folgenden Szenarios erklären: (Beachten Sie, dass Bilder lauter sprechen als Worte! Ich habe eine bildliche Darstellung bereitgestellt.)
Nehmen wir ein Beispiel, in dem Sie mit Ihren Teammitgliedern an einem Projekt arbeiten. Sie werden also ein Hauptzweig des Projekts sein, und alle Mitwirkenden müssen es in ihr eigenes lokales Repository einteilen und dann an diesem lokalen Zweig arbeiten, um Module zu ändern / hinzuzufügen, und dann zum Hauptzweig zurückkehren.
So Anfangszustand der beiden Zweige , wenn gegabelt Sie das Hauptprojekt auf Ihrem lokalen Repository wird wie this- sein (
A
,B
undC
sind Module bereits des Projekts abgeschlossen)Jetzt haben Sie begonnen, an dem neuen Modul zu arbeiten (angenommen
D
), und wenn Sie dasD
Modul abgeschlossen haben, möchten Sie es in den Hauptzweig verschieben. In der Zwischenzeit hat jedoch einer Ihrer Teamkollegen ein neues ModulE
entwickeltF
und geändertC
.Was nun passiert ist, ist, dass Ihr lokales Repository hinter dem ursprünglichen Fortschritt des Projekts fehlt und das Übertragen Ihrer Änderungen auf den Hauptzweig zu Konflikten führen und
D
zu Fehlfunktionen Ihres Moduls führen kann .Um solche Probleme zu vermeiden und parallel zum ursprünglichen Projektfortschritt zu arbeiten, gibt es zwei Möglichkeiten:
1. Git Fetch- Hiermit werden alle Änderungen heruntergeladen, die am Ursprungs- / Hauptzweigprojekt vorgenommen wurden und in Ihrem lokalen Zweig nicht vorhanden sind. Und wartet, bis der Befehl Git Merge die Änderungen übernimmt, die in Ihr Repository oder Ihren Zweig abgerufen wurden.
Jetzt können Sie die Dateien sorgfältig überwachen, bevor Sie sie mit Ihrem Repository zusammenführen. Und Sie können
D
bei Bedarf auch aufgrund von Modified ändernC
.2. Git Pull - Hiermit wird Ihr lokaler Zweig mit dem Ursprungs- / Hauptzweig aktualisiert, dh es handelt sich tatsächlich um eine Kombination aus Git Fetch und Git Merge nacheinander. Dies kann jedoch zu Konflikten führen. Es wird daher empfohlen, Git Pull mit einer sauberen Kopie zu verwenden.
quelle
Wir sagen einfach:
Wenn Sie ausführen
git pull
, müssen Sie die Daten nicht mit lokal zusammenführen. Wenn Sie ausführengit fetch
, bedeutet dies, dass Sie ausgeführt werden müssen,git merge
um den neuesten Code auf Ihren lokalen Computer zu übertragen. Andernfalls würde der lokale Maschinencode ohne Zusammenführung nicht geändert.Wenn Sie also in der Git Gui abrufen, müssen Sie die Daten zusammenführen. Durch das Abrufen selbst werden die Codeänderungen bei Ihrem lokalen Benutzer nicht vorgenommen. Sie können dies überprüfen, wenn Sie den Code aktualisieren, indem Sie einmal abrufen und sehen; Der Code wird sich nicht ändern. Dann führen Sie zusammen ... Sie sehen den geänderten Code.
quelle
git pull == git fetch + git merge
:)git pull --rebase = git fetch + git rebase
git fetch
Ruft den Code vom Remote-Server zu Ihren Tracking-Zweigen in Ihrem lokalen Repository ab. Wenn Ihre Remote - Nameorigin
(der Standard) , dann werden diese Zweige innerhalb seinorigin/
, zum Beispielorigin/master
,origin/mybranch-123
etc. Diese sind nicht Ihre Stromzweige, sie sind lokale Kopien dieses Zweiges vom Server.git pull
führt a ausgit fetch
, führt dann aber auch den Code aus dem Tracking-Zweig in Ihre aktuelle lokale Version dieses Zweigs ein. Wenn Sie für diese Änderungen noch nicht bereit sind,git fetch
zuerst.quelle
git fetch
wird Remote - Niederlassungen abrufen , so dass Siegit diff
odergit merge
sie mit dem aktuellen Zweig.git pull
führt Fetch auf dem Remote-Brach aus, der vom aktuellen Zweig verfolgt wird, und führt dann das Ergebnis zusammen. Sie können verwenden,git fetch
um festzustellen, ob Aktualisierungen für den Remote-Zweig vorhanden sind, ohne diese mit Ihrem lokalen Zweig zusammenführen zu müssen.quelle
Git Fetch
Sie laden Änderungen in Ihren lokalen Zweig vom Ursprung durch Abrufen herunter. Fetch fragt das Remote-Repo nach allen Commits, die andere gemacht haben, die Sie jedoch nicht in Ihrem lokalen Repo haben. Fetch lädt diese Commits herunter und fügt sie dem lokalen Repository hinzu.
Git Merge
Sie können Änderungen, die durch Abrufen heruntergeladen wurden, mit dem Befehl zum Zusammenführen anwenden. Beim Zusammenführen werden die aus dem Abruf abgerufenen Commits übernommen und versucht, sie Ihrem lokalen Zweig hinzuzufügen. Durch die Zusammenführung wird der Festschreibungsverlauf Ihrer lokalen Änderungen beibehalten, sodass Git weiß, wie andere Ihre Änderungen zusammenführen können, wenn Sie Ihren Zweig mit Push teilen.
Git Pull
Abrufen und Zusammenführen werden häufig genug ausgeführt, sodass ein Befehl erstellt wurde, der die beiden Elemente "Ziehen" kombiniert. Pull führt einen Abruf und dann eine Zusammenführung durch, um die heruntergeladenen Commits zu Ihrer lokalen Niederlassung hinzuzufügen.
quelle
Der einzige Unterschied zwischen
git pull
undgit fetch
ist, dass:git pull
zieht von einem entfernten Zweig und führt ihn zusammen.git fetch
ruft nur vom Remote-Zweig ab, wird aber nicht zusammengeführtdh git pull = git fetch + git merge ...
quelle
rm -rf
das Ganze beendet und von vorne angefangen habe. Dummer Git, bitte lass mich einfach auf dem Laufenden bleiben, damit ich wieder arbeiten kann.In einfachen Worten, wenn Sie in ein Flugzeug ohne Internetverbindung steigen wollten ... bevor Sie abfliegen, könnten Sie es einfach tun
git fetch origin <master>
. Es würde alle Änderungen in Ihren Computer abrufen, ihn jedoch von Ihrem lokalen Entwicklungs- / Arbeitsbereich trennen.Im Flugzeug können Sie Änderungen an Ihrem lokalen Arbeitsbereich vornehmen und ihn dann mit dem, was Sie abgerufen haben, zusammenführen und potenzielle Zusammenführungskonflikte ohne Verbindung zum Internet lösen. Und wenn nicht jemand neue widersprüchliche Änderungen am Remote-Repository vorgenommen hat, können Sie
git push origin <branch>
Ihren Kaffee holen, sobald Sie am Ziel angekommen sind .Aus diesem fantastischen Atlassian-Tutorial :
Mit
git pull
:git merge
.git fetch
wo es nur Ihre betrifft.git/refs/remotes
, wirkt sich Git Pull sowohl auf Ihre als auch auf Ihre aus.git/refs/remotes
.git/refs/heads/
Hmmm ... also wenn ich die Arbeitskopie nicht aktualisiere
git fetch
, wo nehme ich dann Änderungen vor? Wo speichert Git Fetch die neuen Commits?Gute Frage. Es platziert es irgendwo isoliert von Ihrer Arbeitskopie. Aber wieder wo? Lass es uns herausfinden.
Führen Sie in Ihrem Projektverzeichnis (dh wo Sie Ihre
git
Befehle ausführen) Folgendes aus:ls
. Dies zeigt die Dateien und Verzeichnisse. Nichts cooles, ich weiß.Jetzt tu es
ls -a
. Daraufhin werden Punktdateien angezeigt , dh Dateien, die mit beginnen..
Anschließend wird ein Verzeichnis mit dem Namen angezeigt :.git
.cd .git
. Dies wird offensichtlich Ihr Verzeichnis ändern.ls
. Sie sehen eine Liste der Verzeichnisse. Wir suchenrefs
. Tu escd refs
.heads
undremotes
. Verwenden Siecd
, um auch in ihnen zu überprüfen.git fetch
, was Sie tun, aktualisiert die Elemente im/.git/refs/remotes
Verzeichnis. Es wird nichts im/.git/refs/heads
Verzeichnis aktualisiert .git pull
wird zuerst diegit fetch
Elemente im/.git/refs/remotes
Verzeichnis aktualisieren , dann mit Ihrem lokalen Verzeichnis zusammenführen und dann den Kopf im/.git/refs/heads
Verzeichnis ändern .Eine sehr gute Antwort finden Sie auch unter Wo platziert sich 'git fetch'? .
Suchen Sie auch im Beitrag zu den Namenskonventionen für Git-Zweige nach "Schrägstrichnotation" . Es hilft Ihnen besser zu verstehen, wie Git Dinge in verschiedenen Verzeichnissen platziert.
Um den tatsächlichen Unterschied zu sehen
Mach einfach:
Wenn der Remote-Master aktualisiert wurde, wird folgende Meldung angezeigt:
Wenn Sie dies nicht
fetch
getangit checkout master
hätten, würde Ihr lokaler Git nicht wissen, dass 2 Commits hinzugefügt wurden. Und es würde nur sagen:Aber das ist veraltet und falsch. Das liegt daran, dass Git Ihnen Feedback nur basierend auf dem gibt, was es weiß. Es ist nicht bekannt, dass neue Commits noch nicht abgeschlossen wurden ...
Gibt es eine Möglichkeit, die neuen Änderungen zu sehen, die in Remote vorgenommen wurden, während lokal an der Zweigstelle gearbeitet wurde?
Einige IDEs (z. B. Xcode) sind sehr intelligent und verwenden das Ergebnis von a
git fetch
und können die Codezeilen mit Anmerkungen versehen, die im Remote-Zweig Ihres aktuellen Arbeitszweigs geändert wurden. Wenn diese Zeile sowohl durch lokale Änderungen als auch durch Remote-Verzweigung geändert wurde, wird diese Zeile mit Rot versehen. Dies ist kein Zusammenführungskonflikt. Es ist ein potenzieller Zusammenführungskonflikt. Es ist ein Headsup, mit dem Sie den zukünftigen Zusammenführungskonflikt lösen können, bevor Sie ihngit pull
vom Remote-Zweig aus ausführen.Spaß Tipp:
Wenn Sie einen Remote-Zweig abgerufen haben, z. B.:
Dann würde dies in Ihr Fernbedienungsverzeichnis gehen. Es ist immer noch nicht in Ihrem lokalen Verzeichnis verfügbar. Es vereinfacht jedoch das Auschecken zu diesem Remote-Zweig durch DWIM (Tun Sie, was ich meine):
Sie müssen nicht mehr tun:
Mehr dazu hier
quelle
Mit Git können chronologisch ältere Commits nach neueren Commits angewendet werden. Aus diesem Grund ist das Übertragen von Commits zwischen Repositorys in zwei Schritte unterteilt:
Kopieren neuer Commits vom Remote-Zweig zum Kopieren dieses Remote-Zweigs innerhalb des lokalen Repos.
(Repo-zu-Repo-Betrieb)
master@remote >> remote/origin/master@local
Integration neuer Commits in die lokale Niederlassung
(Inside-Repo-Betrieb)
remote/origin/master@local >> master@local
Es gibt zwei Möglichkeiten, Schritt 2 auszuführen. Sie können:
In der
git
Terminologie ist Schritt 1git fetch
, Schritt 2 istgit merge
odergit rebase
git pull
istgit fetch
undgit merge
quelle
Git ruft mit zwei Befehlen den Zweig der neuesten Version von der Fernbedienung zur lokalen Version ab:
git fetch: Git wird die neueste Version von remote auf local übertragen, aber nicht automatisch zusammenführen.
git fetch origin master
git log -p master..origin/master
git merge origin/master
Die obigen Befehle bedeuten, dass die neueste Version des Hauptzweigs vom Ursprung vom Remote- zum Ursprungshauptzweig heruntergeladen wird. Und vergleicht dann den lokalen Hauptzweig und den Ursprungshauptzweig. Schließlich zusammenführen.
git pull: Git wird die neueste Version von der Fernbedienung herunterladen und in die lokale Version einbinden.
git pull origin master
Der obige Befehl entspricht
git fetch
undgit merge
. In der Praxisgit fetch
vielleicht sicherer, da wir vor dem Zusammenführen die Änderungen sehen und entscheiden können, ob sie zusammengeführt werden sollen.quelle
Um dies zu verstehen, müssen Sie zunächst verstehen, dass Ihr lokaler Git nicht nur Ihr lokales Repository verwaltet, sondern auch eine lokale Kopie des Remote-Repositorys.
git fetch
bringt Ihre lokale Kopie des Remote-Repositorys auf den neuesten Stand. Wenn Ihr Remote-Repository beispielsweise GitHub ist, möchten Sie möglicherweise alle im Remote-Repository vorgenommenen Änderungen an Ihrer lokalen Kopie des Remote-Repositorys abrufen. Auf diese Weise können Sie Vorgänge wie Vergleichen oder Zusammenführen ausführen.git pull
Auf der anderen Seite werden die Änderungen im Remote-Repository dahin verschoben, wo Sie Ihren eigenen Code aufbewahren. In der Regelgit pull
wirdgit fetch
zuerst die lokale Kopie des Remote-Repositorys auf den neuesten Stand gebracht und anschließend werden die Änderungen in Ihrem eigenen Code-Repository und möglicherweise in Ihrer Arbeitskopie zusammengeführt.quelle
git pull == (git fetch + git merge)
git fetch ändert sich nicht in lokale Zweige.
Wenn Sie bereits ein lokales Repository mit einer für das gewünschte Projekt eingerichteten Fernbedienung haben, können Sie mit git fetch alle Zweige und Tags für die vorhandene Fernbedienung abrufen. ... Beim Abrufen werden keine Änderungen an lokalen Zweigen vorgenommen. Sie müssen daher einen Remote-Zweig mit einem gepaarten lokalen Zweig zusammenführen, um neu abgerufene Änderungen zu übernehmen. von Github
quelle
Der Versuch, klar und einfach zu sein.
Der Befehl git pull ist tatsächlich ein
shortcut
for git-Abruf, gefolgt von dem Befehl git merge oder git rebase, abhängig von Ihrer Konfiguration. Sie können Ihr Git-Repository so konfigurieren, dass Git Pull ein Abruf gefolgt von einer Rebase ist.quelle
Eine einfache grafische Darstellung für Anfänger,
Hier,
wird Code aus dem Repository abrufen und mit Ihrem lokalen Repository neu erstellen ... in Git Pull besteht die Möglichkeit, dass neue Commits erstellt werden.
aber in ,
Git holen
ruft Code aus dem Repository ab und wir müssen ihn manuell mithilfe von neu starten
git rebase
Beispiel: Ich werde vom Server-Master abrufen und ihn in meinem lokalen Master neu starten.
1) Git Pull (Rebase wird automatisch durchgeführt):
Hier ist der Ursprung Ihr Remote-Repo- Master ist Ihre Branche
2) Git Fetch (muss manuell neu erstellt werden):
Es werden Serveränderungen vom Ursprung abgerufen. und es wird in Ihrer Nähe sein, bis Sie es selbst neu starten. Wir müssen Konflikte manuell beheben, indem wir Codes überprüfen.
Dadurch wird der Code in local zurückgesetzt. Stellen Sie vorher sicher, dass Sie in der richtigen Branche sind.
quelle
Tatsächlich verwaltet Git eine Kopie Ihres eigenen Codes und des Remote-Repositorys.
Der Befehl
git fetch
aktualisiert Ihre lokale Kopie, indem Daten aus dem Remote-Repository abgerufen werden. Der Grund, warum wir dies benötigen, ist, dass jemand anderes möglicherweise einige Änderungen am Code vorgenommen hat und Sie sich auf dem Laufenden halten möchten.Der Befehl
git pull
bringt die Änderungen im Remote-Repository dahin, wo Sie Ihren eigenen Code aufbewahren. Normalerweisegit pull
wird dazu zuerst ein 'Git-Abruf' durchgeführt, um die lokale Kopie des Remote-Repositorys auf den neuesten Stand zu bringen. Anschließend werden die Änderungen in Ihrem eigenen Code-Repository und möglicherweise in Ihrer Arbeitskopie zusammengeführt.quelle