Wie verschiebe ich einen Git-Zweig in ein eigenes Repository?

180

Ich habe einen Zweig, den ich in ein separates Git-Repository verschieben möchte, und behalte im Idealfall den Verlauf dieses Zweigs dabei. Bisher habe ich mir angesehen git filter-branch, aber ich kann nicht erkennen, ob es das kann, was ich tun möchte.

Wie extrahiere ich einen Git-Zweig in ein eigenes Repository?

Aupajo
quelle

Antworten:

280

Sie können einfach einen Zweig in ein neues Repository verschieben. Die ganze Geschichte wird damit einhergehen. Sie können dann auswählen, ob der Zweig aus dem ursprünglichen Repository gelöscht werden soll.

z.B

git push url://to/new/repository.git branch-to-move:new-branch-name

Bei einem neuen Repository ist der Name des neuen Zweigs normalerweise der Master.

Das Erstellen eines neuen, leeren Repositorys kann mit erfolgen git init.

CB Bailey
quelle
15
Nur für den Fall, dass sich jemand wundert, habe ich die URL durch den Pfad zu einem Git-Repository-Verzeichnis ersetzt, und das hat perfekt funktioniert.
Aupajo
48
Sie können den Filialnamen auch im neuen Repository benennen: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven
4
Der obige Kommentar von Yves ist korrekt, andernfalls haben Sie keinen Master und der Klonprozess wird abgeschlossen warning: remote HEAD refers to nonexistent ref, unable to checkout.. Wenn Sie bereits in diesem Stadium sind, gehen git checkout -b branch-to-moveSie einfach mit und Sie sind in Sicherheit oder Sie gehen einfach mit git checkout -b master, um Ihre Hauptniederlassung zu haben :)
Ain Tohvri
git checkout -b mastererror: src refspec master does not match any.Ich habe mein Problem gelöst, es war auf dem Bildschirm (ich frage mich nur, warum ich den
Filialnamen,
2
Falls diese Antwort auch für Sie verwirrend war, habe ich sie folgendermaßen verstanden, damit sie funktioniert: 1) Befinden Sie sich in Ihrem Terminal in dem Verzeichnis, das das Repo und den Zweig enthält, den Sie in ein neues Repo umwandeln möchten. 2) das urlsollte eine Git-URL sein, wie [email protected]: brianzelip / lebensmittel.git; 3) branch-to-moveist der Zweig des aktuellen Repos, den Sie in ein neues Repo umwandeln möchten; 4) new-branch-nameist der Name, den Sie für den neuen Zweig in dem neu erstellten Repo wünschen, dh : master.
Brian Zelip
19

Dadurch wird der Verlauf aller Zweige beibehalten, aber Ihre Kopie verweist insbesondere auf den einen Zweig:

git clone -b newbranch CurrentRepo NewRepo

Dies bewegt nichts, sondern erstellt nur eine Kopie.

Damon
quelle
2
Bemerkenswert clone -bist , dass das neu ist. Es erfordert git> = 1.6.5 (veröffentlicht im Oktober 2009).
CB Bailey
Ich hatte Probleme, dies zum Laufen zu bringen, aber das war, bevor ich die Nachricht von Charles Bailey sah.
Aupajo