git fetch vs. git fetch origin master hat unterschiedliche Auswirkungen auf den Tracking-Zweig
Dies ist vor allem von der Art der Neugier, wie ich versucht bin vertraut mit Git. Ich habe mir die Unterlagen für 'git fetch' aber ich sehe nicht, eine offensichtliche Erklärung für die weiter unten. Vielen Dank im Voraus, und entschuldige mich, wenn dies ist howlingly offensichtlich.
1) Aus einem zentralen repository, sagen GitHub, ich clone a repository namens website
auf jeder der beiden Maschinen HostA
und HostB
.
2) auf HostA
ist, mache ich eine änderung an einer Datei, sagen README.txt
und auszuführen.
An dieser Stelle auf HostA
, die commits für die Branchen master
und
origin/master
sind, wie erwartet anders, da ich noch nicht geschoben, aber
git show master
git show origin/master
Bericht unterschiedliche hashes (seit master
hat, die änderung und die origin/master
nicht)
3) wenn ich schieben Sie nach, dass der gleiche.
4) Jetzt, über, auf HostB
wenn ich den folgenden Code:
git fetch
git merge FETCH_HEAD
danach auf HostB master
und origin/master
Bericht der gleiche hash bei der Abfrage mit git show
ABER
wenn ich stattdessen getan hatte, auf HostB
:
git fetch origin master
git merge FETCH_HEAD
zu diesem Zeitpunkt war die hashes noch unterscheiden.
git show origin
git show origin/master
Bericht verschiedenen hashes
Den tracking-branch origin/master
nicht mehr aktualisiert, bis ich einen einfachen git fetch
Warum ist das so?
InformationsquelleAutor der Frage Xoanon93 | 2012-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Zweig hat eine zugeordnete remote-tracking-branch das bedeutet, dass die Konfiguration wie:
Den wichtigsten Teil der
git fetch
die erklären, den Unterschied zwischen den beiden Befehlen ist:Lassen Sie mich wiederholen:
wenn
<dst>
ist nicht leer string, der lokalen ref entspricht, ist es schnell weitergeleitet mit<src>
.Zu wissen, dass:
git fetch
entsprichtgit fetch origin master:master
(von der default-Wert Ihrer Filiale config), so wird es aktualisieren Sie die remote-tracking-branch: das Ziel der refspec angegeben ist für Sie.git fetch origin master
ist äquivalent zu "git fetch origin master:
", nicht "git fetch origin master:master
"; es speichert abgerufenen Wert von 'master
' Zweig (remote 'origin
') inFETCH_HEAD
und nicht in 'master
' Zweig-oder remote-tracking - 'remotes/origin/master
' - Zweig (von Jakub Narębski's Antwort)In anderen Worten, Sie nicht angegeben haben, das Ziel Ihrer refspec
InformationsquelleAutor der Antwort VonC
Die Antwort liegt in den Nachrichten, die Sie erhalten zurück von
git fetch
. Im ersten Fall, wenn Sie Holen ohne eine refspec, sehen Sie, dass der remote-tracking branches aktualisiert:Beachten Sie, wie die Nachricht sagt, dass origin/master ist aktualisiert mit dem master von der Herkunft.
Nun im zweiten Fall, in dem Sie angeben, die refspec, Sie bekommen etwas ganz anderes:
So, wenn Sie angeben, die refspec, die remote-tracking-branch (origin/master) wird NICHT aktualisiert, nur FETCH_HEAD.
Das Endergebnis ist, dass Sie erscheinen vor origin/master, wenn du Sie nicht wirklich. Ich kann mir nicht vorstellen, warum dieses Verhalten wäre wünschenswert, aber es ist definitiv eine interessante, kleine spielerei von der fetch-Befehl.
InformationsquelleAutor der Antwort Ethan Brown
Wenn Sie möchten, fast-forward merge selbst oder mit git pull. Sie scheinen nicht zu verstehen, dass der Zweck der git fetch ist NICHT aktualisieren Sie Ihre Arbeits-Baum. Fetch ist gedacht, um aktualisieren Sie Ihre tracking branches.
InformationsquelleAutor der Antwort UpAndAdam