Wie ändere ich die Fernbedienung, die ein Zweig verfolgt?

670

Das centralRepository musste auf einem neuen Server eingerichtet werden, also habe ich auf meinem lokalen Repo eine neue Fernbedienung erstellt und darauf verschoben.

Aber jetzt, wenn ich es tue git pull, behauptet es, ich sei auf dem neuesten Stand. Es ist falsch - es erzählt mir von dem alten Remote-Zweig, nicht von dem neuen, von dem ich sicher weiß, dass er neue Commits abrufen muss.

Wie ändere ich meinen lokalen Zweig, um eine andere Fernbedienung zu verfolgen?

Ich kann dies in der Git-Konfigurationsdatei sehen, aber ich möchte die Dinge nicht durcheinander bringen.

[branch "master"]
    remote = oldserver
    merge = refs/heads/master
Joachim
quelle
1
Ich habe Ihren Titel optimiert - Sie versuchen tatsächlich, die Fernbedienung zu ändern, die Sie verfolgen, verfolgen aber immer noch den gleichen Filialnamen.
Cascabel
5
Es ist schwierig, dies als Duplikat von Wie macht man einen vorhandenen Git-Zweig zu einem Remote-Zweig? . Diese Frage gibt nicht an, dass der Zweig bereits einen Remote-Zweig verfolgt. Dieser tut es.
1
Mir scheint, dass das Bearbeiten der Konfigurationsdatei der einfachste und sicherste Weg ist, dies
Steven Lu

Antworten:

1077

Verwenden von git v1.8.0 oder höher:

git branch branch_name --set-upstream-to your_new_remote/branch_name

Oder Sie können den -uSchalter verwenden:

git branch branch_name -u your_new_remote/branch_name

Verwenden von git v1.7.12 oder früher:

git branch --set-upstream branch_name your_new_remote/branch_name

urschrei
quelle
2
Dies war, wonach ich gesucht habe - der Remote-Tracking-Zweig für den angegebenen Zweig wurde geändert. Vielen Dank!
Joachim
7
Ah, mein schlechtes. Ich würde es immer noch über config machen, weil Sie sicher sein können, den Filialnamen nicht versehentlich zu ändern, aber alles gut. +1.
Cascabel
Aus den Versionshinweisen zu 1.8.0 : "Es war verlockend," git branch --set-upstream origin / master "zu sagen, aber das weist Git an, den lokalen Zweig" origin / master "so anzuordnen, dass er in den aktuell ausgecheckten Zweig integriert wird. Dies ist höchst unwahrscheinlich, was der Benutzer meinte. Die Option ist veraltet. Verwenden Sie stattdessen die neue Option "--set-upstream-to" (mit einem kurzen und süßen "-u"). "
Jared Beck
So sauber ;_; Ich könnte das kleine Durcheinander, das ich so leicht verursacht habe, beheben! Vielen Dank =))
Aditya MP
56
Wenn der Fernverfolgungszweig noch nicht vorhanden ist, aber ein vorhandener Fernverfolgungszweig derzeit verfolgt wird, kann er nicht in den nicht vorhandenen neuen Fernverfolgungszweig geändert werden. Sie müssen zuerst den aktuellen Remote-Tracking-Zweig deaktivieren: git branch --unset-upstream- Dann funktioniert er wie in dieser Antwort angegeben (oder mit der nächsten git push -u / --set-upstream).
hakre
87

Für mich war das Update:

git remote set-url origin https://some_url/some_repo

Dann:

git push
Kritiker
quelle
18
Dies ändert tatsächlich, wo sich die Fernbedienung befindet. Es ändert sich nicht, welche Fernbedienung Sie (technisch) verfolgen. Sie verfolgen immer noch "Ursprung". Es wird lediglich die Definition des Ursprungs aktualisiert. In einigen Anwendungsfällen kann dies eine schlechte Sache sein. Angenommen, Sie geben jQuery auf und erstellen eine neue Fernbedienung. "origin" ist deine Gabel, "upstream" ist jQuery. Nehmen wir dann an, Sie müssen vorübergehend das Original-Repo anstelle Ihrer Gabel verfolgen. Wenn Sie es verwendet set-urlund vergessen haben, es zurückzusetzen, git pushwürden zukünftige Befehle fehlschlagen
stevendesu
42

Mit einem aktuellen Git (2.5.5) lautet der Befehl wie folgt:

git branch --set-upstream-to=origin/branch

Dadurch wird der remote verfolgte Zweig für Ihren aktuellen lokalen Zweig aktualisiert

Ko2r
quelle
3
Durch Schlagen git branch --set-upstream-to=origin/developwurde der Fehler ausgelöst : error: the requested upstream branch 'origin/develop' does not exist. Zuvor habe ich einen Remote-Zweig in Delelop umbenannt.
Belgoros
1
@belgoros git fetch --allvielleicht?
Gabriel Devillers
25

Eine weitere Möglichkeit, viel Kontrolle über das Geschehen zu haben, besteht darin, Ihre Konfigurationen von Hand zu bearbeiten:

git config --edit

oder die Kurzschrift

git config -e

Bearbeiten Sie dann die Datei nach Belieben, speichern Sie sie und Ihre Änderungen werden übernommen.

Wranvaud
quelle
1
Das hat mir den Tag gerettet. Vielen Dank!
Martyn Chamberlin
Mein Problem war, dass es zwei Ursprünge gab. (Herkunft und Herkunftsalgo). Aber der lokale Meister verfolgte "origin-algo". Aber ich wollte, dass es "Herkunft" verfolgt. Die einzige Möglichkeit, dies zu ändern, bestand darin, die Git-Konfiguration zu bearbeiten.
Aswin Prasad
19

Wenn Sie vernünftig sind, ist das Bearbeiten der Konfigurationsdatei sicher genug. Wenn Sie etwas paranoider sein möchten, können Sie den Porzellanbefehl verwenden, um ihn zu ändern:

git config branch.master.remote newserver

Wenn Sie sich die Konfiguration vorher und nachher ansehen, werden Sie natürlich feststellen, dass sie genau das getan hat, was Sie tun wollten.

Aber in Ihrem Einzelfall würde ich Folgendes tun:

git remote rename origin old-origin
git remote rename new-origin origin

Das heißt, wenn der neue Server die kanonische Fernbedienung sein soll, warum nicht als Ursprung bezeichnen, als ob Sie ursprünglich von ihm geklont hätten?

Cascabel
quelle
3
Ich hatte das tatsächlich getan, bevor ich auf dieses Problem gestoßen bin - git war clever und hat die Remote-Umbenennung in die Konfigurationsdatei übertragen. In Ihrem Beispiel stand in meiner Konfigurationsdatei also "alter Ursprung".
Joachim
Persönlich denke ich, dass dieser Weg konzeptionell sinnvoller ist als der akzeptierte Weg, aber ich denke, sie sind funktional gleichwertig, richtig?
Evan Donovan
1
@Jefromi: A remote renamewürde nicht das tun, wonach gefragt wird, da es den Namen der Fernbedienung sowohl in [remote]Konfigurationen als auch in [branch]Konfigurationen ändert. In diesem Fall müssen Sie also die Konfigurationsdatei bearbeiten und das, was Sie sagen (Umbenennen von Fernbedienungen), nur in den [remote]Konfigurationszeilen ausführen.
Sumeet Pareek
7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

oder

git fetch
git checkout -b local_branch_name origin/branch_name
uma
quelle
Für meinen Fall brauchte ich git fetch. Ich hatte einen neuen Zweig in Bitbucket erstellt und wollte dorthin wechseln. git weiß nicht , über Remote - Änderungen so dass ich zu tun hatte , git fetchvor git checkout feature/new-feature-branch. Hoffe das hilft jemand anderem.
TelamonAegisthus
6

Dies ist der einfachste Befehl:

git push --set-upstream <new-origin> <branch-to-track>

Wenn der Befehl beispielsweise Folgendes git remote -verzeugt:

origin  ssh://[email protected]/~myself/projectr.git (fetch)
origin  ssh://[email protected]/~myself/projectr.git (push)
team    ssh://[email protected]/vbs/projectr.git (fetch)
team    ssh://[email protected]/vbs/projectr.git (push)

So wechseln Sie stattdessen zur Verfolgung des Teams:

git push --set-upstream team master
Andries
quelle
Der zu verfolgende Zweig ist optional, wenn nichts mehrdeutig ist. Ich habe deinen Vorschlag benutzt, als ich von Github weggezogen bin;) Danke.
Gouessej
4

Sie können entweder Ihren aktuellen Zweig löschen und Folgendes tun:

git branch --track local_branch remote_branch

Oder ändern Sie den Remote-Server in der Konfiguration auf den aktuellen Server

RDL
quelle
hat bei mir nicht funktioniert, nur das Arbeitskommando war das von @uma: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid
2

Basierend auf dem, was ich aus der neuesten Git- Dokumentation verstehe , lautet die Zusammenfassung:

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

Diese Verwendung scheint ein bisschen anders zu sein als die Antwort von urschrei, da in seiner die Zusammenfassung lautet:

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

Ich vermute, sie haben die Dokumentation wieder geändert?

Arshan Khanifar
quelle
1

In der neuesten Git-Version wie 2.7.4 ,

git checkout branch_name #zweigname, dessen Tracking-Zweig Sie ändern möchten

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - entfernter Name

Mohideen bin Mohammed
quelle
1

Ich fand den Beitrag von @critikaster hilfreich, außer dass ich diese Befehle mit GIT 2.21 ausführen musste:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master
user8128167
quelle
0

Am einfachsten ist es, einfach in die neue Filiale zu wechseln:

Git Push -u Ursprungszweig / Name

ArthNRick
quelle