einige Verwirrung bei git pull vs. git-fetch [duplicate]
Lesezeit: 3 Minuten
Also – kann jemand das klären:
Ich renne:
git pull origin master
git status
Und es zieht dann die Änderungen und sagt:
your branch is ahead of origin/master ... blahblah by 6 commits...
Wenn ich dann laufe
git fetch
git status
Es sagt:
# On branch master
nothing to commit (working directory clean)
Also dachte ich git pull ruft git standardmäßig ab – warum heißt es also “um 6 Commits voraus” ohne zusätzliche git fetch?
In diesem speziellen Fall bedeutet es, was es sagt: Ihr Zweig ist voraus, dh enthält ungepushte Commits, was nichts mit dem Pull zu tun hat, es ist nur eine Warnung für Sie.
– bredichin
12. Dezember 2013 um 17:19 Uhr
@bredikhin Aber ich habe diese Commits gerade gezogen – warum in aller Welt sollten sie als nicht gepusht eingestuft werden? Da bin ich verwirrt. Warum erhalte ich beim Pullen von Änderungen aus einem entfernten Zweig nicht sofort die Meldung “Nichts zum Festschreiben (Arbeitsverzeichnis sauber)”?
– Dannyboy
12. Dezember 2013 um 17:24 Uhr
ist es möglich, dass, bevor Sie lief git status Beim zweiten Mal bist du gerannt git push?
– Mikromosen
12. Dezember 2013 um 17:33 Uhr
@Dannyboy Ihre lokalen Commits sind nicht gepusht, nicht die, die Sie gezogen haben.
– bredichin
12. Dezember 2013 um 17:33 Uhr
@bredikhin Aber ich habe keine lokalen Commits. Und wenn ja git fetch – nach git pull -> diese Meldung kommt nicht, ich bekomme nur “nothing to commit (working directory clean)”
– Dannyboy
12. Dezember 2013 um 17:34 Uhr
Der Text “voraus oder hinter X wird übergeben” in git status basiert auf dem Zustand des Tracking-Zweigs für den aktuellen Zweig; remotes/origin/master wenn du dran bist masterzum Beispiel.
Wenn du rennst git pull Wenn sowohl ein Remote- als auch ein Branch angegeben sind, ruft es die neuen Commits ab und führt sie in den aktuellen Branch ein, aber es tut es nicht Aktualisieren Sie die Remote-Tracking-Zweige des Ursprungs. Stattdessen zeigt es auf die gerade abgerufenen Commits als FETCH_HEAD.
Betrieb git fetch ohne Angabe von Argumenten hingegen tut Aktualisieren Sie alle Remote-Tracking-Zweige, damit die Nachricht verschwindet. git pull ohne Argumente tut dasselbe.
Ein subtiler Fallstrick, den ich selbst schon ein paar Mal getroffen habe! Ich wünschte, git hätte stattdessen alle Remote-Tracking-Zweige bei jedem Abruf gegen eine bestimmte Remote aktualisiert.
Nur aus Neugier, weißt du warumgit pull <remote> <branch> aktualisiert die nicht remote/branch Referenz? Sind es nur Hysterische Rosinen oder gibt es einen guten Grund?
– Torek
13. Dezember 2013 um 0:35 Uhr
Es stellt sich heraus, dass es das eigentlich nicht ist git pull <remote> <branch> überhaupt; es ist wirklich git pull <remote> <refspec>. Eine “refspec” ist im Grunde ein durch einen Doppelpunkt getrenntes Quelle-Ziel-Paar, z master:origin/master; git pull origin master:origin/master bedeutet “gehe zum entfernten Ursprung, gib mir seinen Master-Zweig und aktualisiere origin/master im lokalen Repository.” Wenn Sie den Doppelpunkt weglassen, aktualisiert der Abruf lediglich keine lokalen Referenzen FETCH_HEAD.
In diesem speziellen Fall bedeutet es, was es sagt: Ihr Zweig ist voraus, dh enthält ungepushte Commits, was nichts mit dem Pull zu tun hat, es ist nur eine Warnung für Sie.
– bredichin
12. Dezember 2013 um 17:19 Uhr
@bredikhin Aber ich habe diese Commits gerade gezogen – warum in aller Welt sollten sie als nicht gepusht eingestuft werden? Da bin ich verwirrt. Warum erhalte ich beim Pullen von Änderungen aus einem entfernten Zweig nicht sofort die Meldung “Nichts zum Festschreiben (Arbeitsverzeichnis sauber)”?
– Dannyboy
12. Dezember 2013 um 17:24 Uhr
ist es möglich, dass, bevor Sie lief
git status
Beim zweiten Mal bist du geranntgit push
?– Mikromosen
12. Dezember 2013 um 17:33 Uhr
@Dannyboy Ihre lokalen Commits sind nicht gepusht, nicht die, die Sie gezogen haben.
– bredichin
12. Dezember 2013 um 17:33 Uhr
@bredikhin Aber ich habe keine lokalen Commits. Und wenn ja
git fetch
– nachgit pull
-> diese Meldung kommt nicht, ich bekomme nur “nothing to commit (working directory clean)”– Dannyboy
12. Dezember 2013 um 17:34 Uhr