Wie ‘git pull’ ohne Branches zu wechseln (git checkout)?

Lesezeit: 6 Minuten

Benutzeravatar von Diana Saunders
Diana Saunders

Ich bin Laufen gewohnt git pull und andere Befehle aus einem Zweig, an dem ich arbeite. Aber ich habe einen Entwicklungsserver eingerichtet, an dem mehrere Leute arbeiten, also möchte ich dabei nicht die Zweige wechseln müssen.

Wenn ich einen bestehenden Zweig auf dem Dev-Server aus dem Github-Repository, das wir alle verwenden, aktualisieren möchte, was wäre der richtige Weg, dies zu tun?

Wenn ich den Befehl ausführe git pull github branchname zieht das einfach den Zweig in den aktuellen Zweig?

Alle Git-Beispiele, die ich finden kann, scheinen darauf hinzudeuten, dass Sie laufen checkout branchname Erst dann ziehen. Das versuche ich zu vermeiden. Wie gesagt, dies ist ein bestehender Zweig und ich möchte nur auf die neueste Version aktualisieren.

  • git fetch soll machen was du willst.

    – Brad

    17. September 2013 um 18:47 Uhr


  • git fetch würde die lokale Kopie des Remote-Zweigs aktualisieren, aber keinen lokalen Zweig, selbst wenn einer so eingerichtet ist, dass er diesen bestimmten Remote-Zweig verfolgt. Es kann das Gewünschte sein oder auch nicht. (Bearbeiten: Jedenfalls standardmäßig. Es ist möglich, es mit Argumenten aufzurufen, damit es sich anders verhält, aber in diesem Fall sollten die Argumente wirklich hervorgehoben werden.)

    Benutzer743382

    17. September 2013 um 18:50 Uhr


  • Ich verstehe nicht ganz … verwendet jeder dasselbe lokale Repository auf dem Dev-Server? Wollen Sie deshalb nicht die Filiale wechseln? Warum lässt man nicht einfach jeden seinen eigenen privaten Klon erstellen, in dem man arbeiten kann? Siehe auch git: update a local branch without check it out?.

    Benutzer456814

    18. September 2013 um 3:03 Uhr


  • Mögliches Duplikat von Merge, update, and pull Git branchs without using checkouts

    – Michael Mrozek

    15. April 2019 um 15:20 Uhr

Benutzeravatar von koral
Koralle

Ich habe nach demselben gesucht und schließlich die Antwort gefunden, die für mich in einem anderen Stackoverflow-Beitrag funktioniert hat: Merge, update, and pull Git branchs without using checkouts

Grundsätzlich:

git fetch <remote> <srcBranch>:<destBranch>

Beispiel:

git fetch origin branchname:branchname

  • Gibt es eine Möglichkeit, den Upstream-Zweig zu verwenden, anstatt den Quellzweig anzugeben?

    – kambunt

    22. November 2019 um 14:52 Uhr

  • Leider, aber die pull hat Parameter, die die fetch nicht: -s <strategy>, -Xsubtree=... was für mich von entscheidender Bedeutung war, daher ist dies kein gleichwertiger Ersatz. Ich hatte das hier beschriebene Problem: congruityservice.com/blog/… aber in meinem Fall wollte ich überhaupt keine Kasse.

    – Andry

    8. Dezember 2019 um 19:46 Uhr

  • Wenn man bedenkt, dass es bei der Frage um Pull geht, sollte die Antwort stattdessen lauten git pull <remote> <srcBranch>:<destBranch>.

    – Murmeltier

    12. Dezember 2019 um 20:46 Uhr


  • Wenn sich die Commits bereits in Ihrem lokalen Repository befinden: git fetch . origin/master:master

    – Evan

    24. April 2020 um 15:32 Uhr

  • Wenn Sie nur den (Origin|Online)-Zweig mit Ihrem lokalen Zweig zusammenführen möchten, können Sie verwenden git merge origin/master

    – Abdel Rehman

    11. Oktober 2021 um 6:36 Uhr

Ich hatte das gleiche Problem mit der Notwendigkeit, aktuelle Funktionsänderungen zu übernehmen oder zu verstauen, Checkout Meister verzweigen, tun pull Befehl erhalten Sie alles von remote zu lokal master Workspace, wechseln Sie dann erneut zu einem Feature-Branch und führen Sie a rebase um es mit dem Meister auf den neuesten Stand zu bringen.

Um dies alles zu erledigen, halten Sie den Arbeitsbereich im Feature-Zweig und vermeiden Sie das Umschalten. Ich mache Folgendes:

git fetch origin master:master

git rebase master

Und es macht den Trick gut.

  • Dies ist ein guter Rat, begräbt aber die Lede: gemäß den folgenden Antworten, wenn Sie eingeschaltet sind feature und ALLES, was Sie tun möchten, ist, Ihre lokale zu aktualisieren master im Einklang mit dem Ursprung sein, OHNE zu berühren featuremach einfach git fetch origin master:master… und es ist, als ob Sie stash-checkoutMaster-pull-checkoutFeature-stashPop gemacht hätten!

    – Stadt

    26. Juli 2019 um 16:25 Uhr


  • Um den Ursprungsmaster mit Ihrem lokalen Zweig zusammenzuführen, müssen Sie den lokalen Master nicht ziehen. Sie können verwenden git merge origin/master

    – Dan

    16. August 2019 um 11:32 Uhr

  • Ein Pull ist nur ein Abruf, gefolgt von einem Merge/Rebase, also sollten Sie in der Lage sein, dasselbe in einer Zeile zu tun: git pull origin main:main --rebase

    – jor

    15. Januar 2021 um 6:39 Uhr

Ich habe den folgenden Befehl verwendet, um den Ursprungszweig ohne Prüfung auf den lokalen Zweig zu aktualisieren. git holt den Ursprung [BranchName]:[BranchName]

Wenn du willst lokal Verzweigungsspitzen, um danach neu ausgerichtet zu werden git fetchbenötigen Sie einige zusätzliche Schritte.

Nehmen wir konkreter an, dass das Github-Repo Zweige hat D, B, CUnd master (Der Grund für diesen seltsamen Branch-Namen-Satz wird gleich klar). Sie sind auf Gastgeber devhost und Sie befinden sich in einem Repo, wo origin ist das Github-Repo. Sie machen git fetchdie alle Objekte und Aktualisierungen übernimmt origin/D, origin/B, origin/CUnd origin/master. So weit, ist es gut. Aber jetzt sagst du, du willst, dass etwas passiert, weiter devhostZu lokal Geäst D, B, Cund/oder master?

Ich habe diese offensichtlichen (zumindest für mich) Fragen:

  1. Warum willst du die tipps von alle Niederlassungen aktualisiert?
  2. Was ist, wenn ein Zweig (z. B. B) hat Commits, die dem entfernten (github) Repo fehlen? Sollen sie zusammengeführt, umbasiert oder … werden?
  3. Was ist, wenn Sie in einem Zweig sind (z. B. C) und das Arbeitsverzeichnis und/oder der Index werden geändert, aber nicht festgeschrieben?
  4. Was ist, wenn dem Remote-Repo neue Zweige hinzugefügt wurden (A) und/oder Filialen gelöscht (D)?

Wenn die Antwort auf (1) “weil devhost ist eigentlich nicht für die Entwicklung, sondern ein lokaler Spiegel, der einfach eine lokal verfügbare Kopie des Github-Repos aufbewahrt, damit alle unsere eigentlichen Entwickler schnell daraus lesen können, anstatt langsam von Github zu lesen”, dann möchten Sie einen “Spiegel”. anstatt eines “normalen” Repos. Es sollte kein Arbeitsverzeichnis haben und vielleicht auch keine Pushs akzeptieren, in diesem Fall verschwinden die verbleibenden Fragen einfach.

Wenn es eine andere Antwort gibt, wird (2-4) problematisch.

In jedem Fall ist hier eine Möglichkeit, lokale Refs basierend auf Remote-Refs zu aktualisieren (nach dem Ausführen von git fetch -p zum Beispiel):

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

Was geht in die ... code here ... Abschnitt hängt von den Antworten auf die Fragen (2-4) ab.

Verwenden

git fetch

stattdessen. Es aktualisiert die Remote-Refs und -Objekte in Ihrem Repo, lässt aber die lokalen Branches, HEAD und den Worktree allein.

  • Aber das aktualisiert nicht die lokalen Zweige seines Entwicklungsservers … es aktualisiert nur die “Origin”-Zweige in diesem Git-Ordner, die dem Github-Repo des Fragestellers entsprechen.

    – ANeves

    3. Oktober 2017 um 10:52 Uhr

  • Oder, wenn Sie meine Version des Problems wollen: Ich möchte meinen Arbeitszweig mit “master” zusammenführen und nicht mit “origin/master of ssh://bla bla bla”. Durch Abrufen wird der Ursprung/Master aktualisiert, aber nicht der Master.

    – ANeves

    3. Oktober 2017 um 10:53 Uhr

  • Aber das aktualisiert nicht die lokalen Zweige seines Entwicklungsservers … es aktualisiert nur die “Origin”-Zweige in diesem Git-Ordner, die dem Github-Repo des Fragestellers entsprechen.

    – ANeves

    3. Oktober 2017 um 10:52 Uhr

  • Oder, wenn Sie meine Version des Problems wollen: Ich möchte meinen Arbeitszweig mit “master” zusammenführen und nicht mit “origin/master of ssh://bla bla bla”. Durch Abrufen wird der Ursprung/Master aktualisiert, aber nicht der Master.

    – ANeves

    3. Oktober 2017 um 10:53 Uhr

1446240cookie-checkWie ‘git pull’ ohne Branches zu wechseln (git checkout)?

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

Privacy policy