So kopieren Sie einen lokalen Git-Zweig in ein Remote-Repo


127

Ich habe bisher folgende Schritte unternommen:

  1. Ein entferntes Git-Repo geklont
  2. Verzweigte den Hauptzweig zu einem Experiment
  3. bearbeiteter / getesteter / festgeschriebener Code im experimentellen Zweig

Jetzt bin ich nicht bereit, Experimentelles mit Master zu verschmelzen. Ich möchte es jedoch auf das Remote-Repo zurückschieben, da dies das Repository ist, das ich mit einigen Kollegen teile. Ich möchte, dass sie sehen, was ich im experimentellen Bereich getan habe. Normalerweise greife ich nur über SSH auf das Remote-Repo zu.

Wie teile ich meinen lokalen Zweig auf dem Remote-Repo, ohne den Hauptzweig des Remote-Repos zu beeinflussen?


Dieser Link ist auch in diesem Aspekt sehr nützlich. Git-Zweige teilen
Vishnu Kumar

Antworten:


157

Laut git push Handbuchseite :

 git push origin experimental

Suchen Sie eine Referenz, die experimentalim Quell-Repository übereinstimmt (höchstwahrscheinlich würde sie gefunden werden refs/heads/experimental), und aktualisieren Sie dieselbe Referenz (z. B. refs/heads/experimental) im Ursprungs-Repository damit.
Wenn experimentales nicht remote vorhanden wäre, würde es erstellt .

Dies ist das gleiche wie:

git push origin experimental:refs/heads/experimental

Erstellen Sie den Zweig experimentalim Ursprungsrepository, indem Sie den aktuellen experimentalZweig kopieren .
Dieses Formular wird nur benötigt, um einen neuen Zweig oder ein neues Tag im Remote-Repository zu erstellen, wenn der lokale Name und der Remote-Name unterschiedlich sind . Andernfalls funktioniert der Referenzname allein.

Oder, wie im Git-Tipp erwähnt , können Sie eine "Branch's Default Remote" einrichten:

Mit git config können Sie einem bestimmten Zweig eine Standardfernbedienung zuweisen. Diese Standardfernbedienung wird verwendet, um diesen Zweig zu pushen, sofern nicht anders angegeben.

Dies ist bereits für Sie erledigt, wenn Sie den Git-Klon verwenden. So können Sie Git-Push ohne Argumente verwenden, um den lokalen Hauptzweig zu pushen und den Hauptzweig des Ursprungs-Repositorys zu aktualisieren.

git config branch.<name>.remote <remote> 

kann verwendet werden, um dies manuell anzugeben.


Jan schlägt (für git> = 1.7.0 ) die Option push -u(oder push --set-upstream) vor:

Fügen Sie für jeden Zweig, der aktuell ist oder erfolgreich gepusht wurde, eine Upstream-Referenz (Tracking-Referenz) hinzu, die von git-pull (1) ohne Argumente und anderen Befehlen verwendet wird.

Auf diese Weise müssen Sie keine Git-Konfiguration vornehmen.

git push -u origin experimental

12
Sie sollten die -uOption verwenden, um pushsicherzustellen, dass Ihre lokale Zweigstelle die entfernte Zweigstelle nach der Veröffentlichung verfolgt. Wenn Sie vergessen haben, die -uOption zu verwenden, können Sie anschließend einfach git push -uin den Zweig eingeben, dann git pullfunktioniert es.
Jan

Ich habe festgestellt, dass es bei diesem Vorgang git push origin experimentalkeine Hinweise darauf gibt, dass Pakete hochgeladen wurden. Es sieht so aus, als ob die Fernbedienung bereits das gesamte Material von Ihrem früheren Push enthält. Es muss nur an die Schiedsrichter angeschlossen werden .
Kaz

@Kaz: Es hätte das gesamte Material, wenn diese neuen Commits bereits in einem anderen Zweig auf Remote übertragen würden. In diesem Fall git push origin experimentalwürde nur der Zweig experimentalauf der Fernbedienung erstellt.
VonC

Danke dir! Ihre Antwort war sehr hilfreich.
hakre

15

Wenn der Name Ihres Zweigs experimentalund der Name der Fernbedienung lautet origin, ist dies der Fall

git push origin experimental

Gleicher Kommentar wie oben, aber wird dadurch der experimentelle Zweig implizit auf dem Remote-Repo erstellt oder wird er an den Remote-Master gesendet?
Coocoo4Cocoa

1
es schiebt den experimentellen Zweig und berührt den Master weder auf der lokalen Seite noch aus der Ferne
John Douthat

1

git push -u <remote-name> <branch-name>funktioniert nicht, wenn der neu erstellte Zweig nicht aus demselben Repo stammt, dh wenn Sie den neuen Zweig nicht mit erstellt haben git checkout -b new_branch, funktioniert dies nicht.

Zum Beispiel hatte ich zwei verschiedene Repositorys lokal geklont und musste repo2 / branch1 nach repo1 / kopieren und dann auch pushen.

Dieser Link hat mir geholfen, meinen lokalen Zweig (von einem anderen Repo geklont) auf mein Remote-Repo zu übertragen:



0

tl; dr

$ git push --set-upstream origin your_new_branch

Mehr Info

nachdem Sie einige Zusagen in Ihre gemacht haben:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

Sie schieben Ihren Zweig, der einen Upstream angibt, wie folgt in eines der Fernbedienungs-Repositorys:

$ git push --set-upstream REMOTE YOUR_BRANCH

Fernbedienungen können von gesehen werden

$ git remote -v

Normalerweise haben Sie eine einzige Standardfernbedienung origin. Ihr Befehl würde also so aussehen:

$ git push --set-upstream origin your_new_branch

und alle nachfolgenden Stöße können nur mit gemacht werden git push.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.