Git einen Zweig aus einem anderen Repository ziehen?

86

Ich habe ein lokales Git-Repository, das ein Klon eines Repositorys auf Github ist. Jemand hat das Repository gegabelt und Änderungen in einem neuen Zweig in einem neuen Repository vorgenommen. Ich möchte diesen neuen Zweig in mein Repository verschieben (lokal, um ihn zuerst zu bearbeiten, bevor er mit dem Master zusammengeführt wird).

Ich habe versucht, einen neuen Zweig zu erstellen und dann aus dem gegabelten Repository zu ziehen, aber es beschwert sich, weil der neue Zweig eine Kopie des Hauptzweigs sowie der lokalen Dateiänderungen ist, heißt es

error: Your local changes to the following files would be overwritten by merge.

Wie kann ich den Zweig im anderen Repository in einen neuen Zweig in meinem lokalen Repository ziehen?

Ich hoffe das ergibt Sinn. Wenn nicht, ist dies mein Repository: https://github.com/MatthewLM/cbitcoin

Wie Sie sehen, hat jemand ein neues Repository mit dem Zweig "linuxBuild" erstellt: https://github.com/austonst/cbitcoin/tree/linuxBuild

Ich möchte diesen Zweig in meinem lokalen Repository für MatthewLM / cbitcoin.

Wie kann ich das machen?

Matthew Mitchell
quelle

Antworten:

156

Sie müssen sicherstellen, git statusdass in Ihrem lokalen Repository keine nicht bereitgestellten Änderungen vorhanden sind.
Sie können dies tun, indem Sie zuerst Ihre lokalen Änderungen speichern und dann diesen Zweig ziehen. Danach können Sie Ihren Vorrat anwenden.


Wenn Sie die Verzweigungsstruktur der Verzweigung in Ihrem lokalen Repository neu erstellen möchten, haben Sie folgende Möglichkeiten:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Dadurch wird die lokale Niederlassung schafft fork_branchmit der gleichen Geschichte wie <branch>in der Gabel, also fork_branchwird Ihre abzweigen , masterwo <branch>in der Gabelung des Fall ist. Darüber hinaus verfolgt Ihr lokaler Zweig jetzt diesen Zweig in der Verzweigung, sodass Sie problemlos neue Änderungen in die Verzweigung übernehmen können.

Ich denke, Sie müssen noch im Voraus sicherstellen, dass Ihre Arbeitskopie keine Änderungen enthält.

Daniel Hilgarth
quelle
OK danke. Dies wäre großartig, wenn ich meine lokalen Änderungen und die Commits nicht in der Verzweigung von der Gabelung finden wollte. Aber was ist, wenn der neue Zweig genau so sein soll, wie er sich im Fork-Repository befindet? Dazu gehört das Entfernen von Commits aus meinem eigenen Repository, nachdem die Verzweigung für diesen neuen Zweig erfolgt ist. Auf diese Weise wäre es so, als würde der Zweig in meinem eigenen Repository erstellt und nicht in einem gegabelten.
Matthew Mitchell
Nun, Ihre Antwort ist eine akzeptable Lösung für das, was ich tun muss, aber ich würde es einfacher finden, wenn ich einen neuen Zweig in ein Repository ziehen könnte. Ich werde eine Weile warten, um zu sehen, was andere sagen.
Matthew Mitchell
@MatthewMitchell: Bitte überprüfen Sie das Update. Haben Sie danach gesucht?
Daniel Hilgarth
Nun, ich habe am Ende die Methode zum Zusammenführen mit einem anderen Zweig verwendet (ich habe es gerade mit dem Master zusammengeführt), aber in dem Fall, in dem ich nur einen Zweig genau so haben möchte, wie er aus einem anderen Repository stammt, werde ich den Abruf und versuchen Checkout-Methode, die Sie beschrieben haben. Vielen Dank.
Matthew Mitchell
Wird verwendet, um den Zweig "gh-pages" von einem anderen Repo zu migrieren!
Marcello de Sales
37

Methode ohne Remote hinzufügen.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
quelle
2
Vielen Dank dafür, ich habe es mit einem Lesezeichen versehen und komme immer wieder darauf zurück!
Shane Smiskol
2
Beste Antwort für 2020
Diamond