wake-up-neo.com

Wie kann ich einen lokalen Git-Zweig einfach auf eine Remote-Station mit einem anderen Namen übertragen?

Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, einen lokalen Zweig mit einem entfernten Zweig mit einem anderen Namen zu pushen und zu ziehen, ohne immer beide Namen anzugeben.

Beispielsweise:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git Push Origin newb:remote_branch_name

Wenn nun jemand remote_branch_name aktualisiert, kann ich:

$ git pull

Und alles wird zusammengeführt/schnell weitergeleitet. Wenn ich jedoch Änderungen an meinem lokalen "newb" vornehme, kann ich nicht:

$ git Push

Stattdessen muss ich:

% git Push Origin newb:remote_branch_name

Scheint ein bisschen albern. Wenn git-pullgit-config branch.newb.merge Verwendet, um zu bestimmen, woher sie gezogen werden sollen, warum konnte git-Push Keine ähnliche Konfigurationsoption haben? Gibt es eine nette Abkürzung dafür oder soll ich einfach den langen Weg fortsetzen?

163
jmacdonagh

Sicher. Setzen Sie einfach Ihren Push.default Auf upstream, um Zweige in ihre Upstreams zu verschieben (das ist dasselbe, aus dem pull gezogen wird, definiert durch branch.newb.merge), Anstatt Verschieben von Zweigen zu Zweigen, deren Namen übereinstimmen (dies ist die Standardeinstellung für Push.default, matching).

git config Push.default upstream

Beachten Sie, dass dies vor Git 1.7.4.2 tracking nicht upstream hieß. Wenn Sie also eine ältere Version von Git verwenden, verwenden Sie stattdessen tracking. Die Option Push.default Wurde in Git 1.6.4 hinzugefügt. Wenn Sie also eine ältere Version verwenden, steht diese Option nicht zur Verfügung und Sie müssen den Zweig explizit angeben, zu dem Push gesendet werden soll.

88
Brian Campbell

Wenn Sie den ersten Push ausführen, fügen Sie den Parameter -u hinzu:

git Push -u Origin my_branch:remote_branch

Nachfolgende Schübe werden gehen, wo Sie wollen.

BEARBEITEN:

Wie aus dem Kommentar hervorgeht, wird dadurch nur Pull eingerichtet.

git branch --set-upstream

sollte es tun.

156
Adam Dymitruk

Der Befehl von Adam ist jetzt veraltet. Sie können verwenden:

git branch --set-upstream-to Origin/my_remote_branch my_local_branch

um den Upstream-Zweig von my_local_branch auf Origin/my_remote_branch zu setzen.

14
jobin

Hier ist der Prozess, der für mich funktioniert hat.

git clone original-repo-url
git remote rename Origin upstream
git remote add Origin new-repo-url

Jetzt lautet Ihr neues Repo "Origin" und das ursprüngliche Repo "Upstream". Bestätigen Sie dies, indem Sie git remote -v ausführen. (Randnotiz: Upstream wird zum Abrufen vom ursprünglichen Repository verwendet, um Ihre lokale Kopie mit dem Projekt zu synchronisieren, zu dem Sie beitragen möchten. Origin wird zum Ziehen und Verschieben verwendet, da Sie einen Beitrag zu Ihrem eigenen Repository leisten können.).

git Push Origin master

Jetzt ist der Master Ihres neuen Remote-Repos (auf Github) mit dem Original-Master synchronisiert, verfügt jedoch nicht über einen der Funktionszweige.

git rebase upstream/branch-name
git Push Origin master

Rebase ist eine intelligente Verschmelzung. Drücken Sie dann erneut auf "Push to Master", um den ausgewählten Feature-Zweig auf dem neuen Repo als Master anzuzeigen.

Wahlweise:

git remote rm upstream
git remote add upstream new-repo-url
0
urubuz