Wie zieht man in den Not-the-current-Zweig?

Lesezeit: 3 Minuten

Benutzer-Avatar
Steve Bennett

Angenommen, mein aktueller Zweig ist myfeature. Ich möchte den Master auf den neuesten Stand bringen. Beide git merge git pull immer in den aktuellen Zweig zusammenführen, soweit ich das beurteilen kann.

Gibt es eine Möglichkeit, Änderungen von einem entfernten Zweig (z. B. Ursprung/Master) in einen Zweig zu mischen, in dem ich mich derzeit nicht befinde (Master)? Ich kann mir einen Weg vorstellen:

git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply

Gibt es einen besseren?

(Möglicherweise ist meine ganze Frage falsch: würde git fetch Master automatisch aktualisieren, um Ursprung/Master abzugleichen, wenn Remote-Tracking aktiviert ist?)

  • Ich habe die Antwort gefunden, die für mich in einem anderen Stackoverflow-Beitrag funktioniert hat: stackoverflow.com/questions/3216360/… Grundsätzlich: git fetch <remote> <srcBranch>:<destBranch>

    – Koralle

    10. September 2014 um 22:51 Uhr

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

    – pkamb

    10. August 2017 um 20:26 Uhr

Benutzer-Avatar
pkamb

git fetch -u origin master:master

Git-Branches zusammenführen, aktualisieren und abrufen, ohne Checkouts zu verwenden

git fetch -u <remote> <remoteBranch>:<localBranch>

Das -u oder --update-head-ok stellt sicher, dass der Befehl auch dann noch funktioniert, wenn Sie den angegebenen Zweig ausgecheckt haben, was andernfalls zu dem Fehler führt:

fatal: Weigert sich, in den aktuellen Zweig refs/heads/master des nicht-nackten Repositorys zu holen

  • Sehr schön! – erspart das lästige „Zur Hauptleitung wechseln, ziehen, zu Zweig wechseln“, bevor ich meine Sachen auf die aktuelle Hauptleitung rebasiere …

    – Frank Nocke

    17. Oktober 2018 um 9:59 Uhr

Benutzer-Avatar
Torek

Sie haben Recht, dass Pull/Merge nur in den aktuellen Zweig zusammengeführt wird.

Sie können jedoch weiterhin fetch verwenden. Zum Beispiel (Namen unten geändert, um die Unschuldigen zu schützen, aber die Hashes sind echt):

$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56  OTHER_BRANCH -> origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62

In diesem Fall, fetch aktualisierte eine Reihe von Ursprungs-/Zweigstellen. Keine der lokalen Niederlassungen wurde aktualisiert (git rev-parse Ausgabe für diese bleibt gleich), aber die neuen Commits sind jetzt im Repo und können angezeigt werden (git log origin/OTHER_BRANCH, gitk --alletc).

Je nach Bedarf kann dies ausreichend sein. Insbesondere können Sie sehen, was angewendet werden muss origin/master auf zu masterund das alles, ohne Ihre aktuelle Filiale zu verlassen.

  • Ok, ich verstehe, was du sagst – ich kann anfangen, Befehle wie “git branch –merged origin/master” anstelle von “git branch –merged master” zu verwenden. Aber ansonsten nur eine kleine lästige Einschränkung von git.

    – Steve Bennett

    17. März 2012 um 13:08 Uhr

  • Sie können auch die gesamte Sequenz “Verstauen, anderen Zweig auschecken, ziehen, zum vorherigen Zweig zurückkehren, Stash anwenden” automatisieren. So finden Sie heraus, in welchem ​​Zweig Sie sich gerade befinden: $ if name=$(git symbolic-ref -q HEAD); then ... gefolgt von einer Überprüfung für $name Form haben refs/heads/* (und Abstreifen der Refs/Köpfe/ Teil). Siehe auch stackoverflow.com/questions/9752619/get-pretty-git-rev-name. Achten Sie jedoch auf eine fehlgeschlagene Zusammenführung!

    – Torek

    18. März 2012 um 1:41 Uhr


Benutzer-Avatar
pkamb

Ich habe angefangen, github zu verwenden hub sync Helfer, um diesen Prozess zu automatisieren, anstatt sich darauf zu verlassen, einzelne Branches abzurufen, die sich zwischen den verschiedenen Repos ändern, an denen Sie arbeiten:

hub ist eine Erweiterung für Befehlszeilen-Git, mit der Sie alltägliche GitHub-Aufgaben erledigen können, ohne das Terminal verlassen zu müssen. https://hub.github.com/

$ hub sync
  • Wenn der lokale Zweig veraltet ist, spulen Sie ihn vor;
  • Wenn der lokale Zweig ungepushte Arbeit enthält, warnen Sie davor;
  • Wenn der Zweig zusammengeführt erscheint und sein Upstream-Zweig gelöscht wurde, löschen Sie ihn.

Betrieb hub sync sicher aktualisiert alles Ihrer lokalen Branches auf die Version auf der Fernbedienung.

1013810cookie-checkWie zieht man in den Not-the-current-Zweig?

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

Privacy policy