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 warum git 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.

    – AshWilson

    13. Dezember 2013 um 1:11 Uhr

  • Weiterlesen: git-scm.com/book/en/Git-Internals-The-Refspec

    – AshWilson

    13. Dezember 2013 um 1:12 Uhr

1439490cookie-checkeinige Verwirrung bei git pull vs. git-fetch [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy