Git: Füge einen Remote-Zweig lokal zusammen

203

Ich habe alle entfernten Zweige über gezogen git fetch --all. Ich kann den Zweig, über den ich zusammenführen möchte, git branch -aals Fernbedienungen / Ursprung / Zweigname sehen. Das Problem ist, dass es nicht zugänglich ist. Ich kann nicht zusammenführen oder auschecken?

Micahblu
quelle

Antworten:

319

Sie können diese Fernverfolgungszweige ~ (aufgelistet mit git branch -r) mit dem Namen ihrer Fernbedienung referenzieren .

Sie müssen den Remote-Zweig abrufen:

git fetch origin aRemoteBranch

Wenn Sie einen dieser Remote-Zweige in Ihrem lokalen Zweig zusammenführen möchten:

git checkout master
git merge origin/aRemoteBranch

Hinweis 1: Für ein großes Repo mit einer langen Historie möchten Sie die --depth=1Option bei Verwendung hinzufügen git fetch.

Hinweis 2: Diese Befehle funktionieren auch mit anderen Remote-Repos, sodass Sie ein originund ein einrichten können, upstreamwenn Sie an einer Gabel arbeiten.


Gegenteiliges Szenario: Wenn Sie einen Ihrer lokalen Zweige in einem Remote-Zweig zusammenführen möchten (im Gegensatz zu einem Remote-Zweig zu einem lokalen Zweig, wie oben gezeigt), müssen Sie zuerst einen neuen lokalen Zweig über diesem Remote-Zweig erstellen :

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

Die Idee hier ist, "einen Ihrer lokalen Zweige" (hier anotherLocalBranch) mit einem entfernten Zweig ( origin/aBranch) zusammenzuführen.
Dazu erstellen Sie zuerst " myBranch" als Repräsentation dieses Remote-Zweigs: das ist der git checkout -b myBranch origin/aBranchTeil.
Und dann können Sie verschmelzen , anotherLocalBranchum es (zu myBranch).

VonC
quelle
aLocalBranch? ist das ein Tippfehler? Ich denke du wolltest wieder "myBranch" schreiben?
Knocte
1
@knocte Nein: "Wenn Sie einen Ihrer lokalen Zweige mit einem dieser Remote-Zweige zusammenführen möchten": Ich füge " aLocalBranch" zu " myBranch" zusammen, wobei " myBranch" einen Remote-Zweig darstellt origin/aBranch.
VonC
Tut mir leid, dass Sie @VonC gestört haben. In Ihrem vorherigen Kommentar haben Sie gesagt, dass dies aLocalBranchkein Tippfehler ist, aber Sie haben die letzte Änderung (2 Jahre später!) Genehmigt, mit der dieser "wahrscheinliche Tippfehler" korrigiert wird. Ich wollte mich bei Ihnen erkundigen, bevor ich die Bearbeitung rückgängig mache.
Rath
1
@rath Sie haben Recht: Es scheint, als hätte ich diese Bearbeitung etwas hastig überprüft, was an Nachlässigkeit grenzt. Ich habe die Antwort bearbeitet, um den zweiten Zusammenführungsfall zu klären: Können Sie mir sagen, ob dies jetzt klarer ist?
VonC
91

Immer wenn ich eine Zusammenführung durchführe, gehe ich in den Zweig, in den ich zusammenführen möchte (z. B. " git checkout branch-i-am-working-in") und mache dann Folgendes:

git merge origin/branch-i-want-to-merge-from

Michael Dautermann
quelle
2
Ich denke du musst git fetch origin/branch-i-want-to-merge-fromzuerst eine machen, oder?
Hinrich
9
git fetch origin developgefolgt vongit merge origin/develop
Olivier
2
@Olivier Sie haben Recht, dies ist der richtige Weg. git merge allein wird es nicht tun.
Sam
1
Vielen Dank für die clevere Namenskonvention, die mir geholfen hat zu verstehen
Tony2tones
1
@Akira ist nicht git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho
24

Holen Sie sich zuerst den Remote-Zweig vom Ursprung.

git fetch origin remote_branch_name

Führen Sie den Remote-Zweig mit dem lokalen Zweig zusammen

git merge origin/remote_branch_name
Lanil Marasinghe
quelle
1
Dies funktionierte für mich, als die akzeptierte Antwort "Nicht etwas, das wir zusammenführen können" meldete. In meinem Fall wurde ich von der Gabel eines anderen Benutzers meines Repos auf GitHub zusammengeführt.
SJT
Ist der erste Befehlsabruf erforderlich? Liest 'git merge origin / remote_branch_name' aus dem Remote-Zweig, nicht lokal. Es sollte mir also egal sein, ob die lokale Niederlassung aktualisiert wurde oder nicht.
Michael Freidgeim
20

Vielleicht möchten Sie den Remote-Zweig mit einem lokalen Zweig verfolgen :

  1. Erstellen Sie eine neue lokale Niederlassung: git branch new-local-branch
  2. Legen Sie diesen neu erstellten Zweig fest, um den Remote-Zweig zu verfolgen: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Geben Sie in diesen Zweig ein: git checkout new-local-branch
  4. Ziehen Sie den gesamten Inhalt des Remote-Zweigs in den lokalen Zweig: git pull
e18r
quelle
3

Wenn Sie Ihren Remote-Zweig bereits abgerufen haben und dies tun git branch -a, erhalten
Sie Folgendes:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Danach können Sie verwenden rep_mirror/8.0 Ihren Remote-Zweig lokal festlegen.

Der Trick ist, dass das remotes/rep_mirror/8.0aber nicht funktioniertrep_mirror/8.0 funktioniert.

Also ein Befehl wie git merge -m "my msg" rep_mirror/8.0 die Zusammenführung.

(Hinweis: Dies ist ein Kommentar zur Antwort von @VonC. Ich habe ihn als weitere Antwort angegeben, da Codeblöcke nicht in das Kommentarformat passen.)

Herve-Guerin
quelle