Ich weiß, wie man einen neuen Zweig erstellt, der entfernte Zweige verfolgt, aber wie kann ich einen vorhandenen Zweig dazu bringen, einen entfernten Zweig zu verfolgen?
Ich weiß, dass ich die .git/config
Datei einfach bearbeiten kann, aber es scheint, dass es einen einfacheren Weg geben sollte.
git
branch
git-branch
Pat Notz
quelle
quelle
git push -u origin branch-name
.git pull
werden häufig hilfreiche Nachrichten über den entsprechenden Befehl zumgit branch --set-upstream-to origin/<branch>
--set-upstream
erzeugt einen Fehler:fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
Sogit branch --set-upstream-to origin/<branch name>
ist der aktuelle Befehl, der funktioniert.Antworten:
Bei einem Zweig
foo
und einer Fernbedienungupstream
:Ab Git 1.8.0:
Oder wenn der lokale Zweig
foo
nicht der aktuelle Zweig ist:Wenn Sie längere Befehle eingeben möchten, entsprechen diese den beiden oben genannten:
Ab Git 1.7.0:
Anmerkungen:
foo
den Remote-Zweigfoo
von Remote verfolgtupstream
.git fetch upstream
vorher aus.Siehe auch: Warum muss ich die ganze Zeit "--set-upstream" machen?
quelle
git branch --set-upstream master origin/master
Dies entspricht dem, was automatisch ausgeführt wird, wenn Sie ein Repository zum ersten Mal klonen.git push -u origin foo
viaSie können Folgendes tun (vorausgesetzt, Sie sind auf dem Master ausgecheckt und möchten einen Push an einen Remote-Zweigstellenmaster senden):
Richten Sie die 'Fernbedienung' ein, falls Sie sie noch nicht haben
Konfigurieren Sie nun den Master so, dass er weiß, wie er verfolgt werden soll:
Und drücken Sie:
quelle
error: the requested upstream branch 'upstream/master' does not exist
.origin
und nichtupstream
.Ich mache dies als Nebeneffekt des Drückens mit der
-u
Option wie inDie äquivalente lange Option ist
--set-upstream
.Der
git-branch
Befehl versteht auch--set-upstream
, aber seine Verwendung kann verwirrend sein. Version 1.8.0 ändert die Schnittstelle.Angenommen, Sie haben eine lokale
foo
Niederlassung und möchten, dass diese die Niederlassung mit demselben Namen wie ihre vorgelagerte Niederlassung behandelt. Mach das möglich mitoder nur
quelle
--set-upstream-to=...
ist genau das, wonach ich gesucht habe.Möglicherweise finden Sie das
git_remote_branch
Tool hilfreich. Es bietet einfache Befehle zum Erstellen, Veröffentlichen, Löschen, Verfolgen und Umbenennen von Remote-Zweigen. Eine nette Funktion ist, dass Sie einengrb
Befehl bitten können, zu erklären, welche Git-Befehle er ausführen würde.quelle
Eigentlich damit die akzeptierte Antwort funktioniert:
quelle
Ich glaube, dass Sie bereits in Git 1.5.x einen lokalen Zweig wie diesen zu
$BRANCH
einem entfernten Zweig machenorigin/$BRANCH
können.In Anbetracht dessen
$BRANCH
undorigin/$BRANCH
vorhanden, und Sie haben derzeit nicht ausgecheckt$BRANCH
(wechseln Sie weg, wenn Sie haben), tun Sie:Dies wird
$BRANCH
als Tracking-Zweig neu erstellt. Das-f
erzwingt die Schöpfung trotz$BRANCH
bereits vorhandener.--track
ist optional, wenn die üblichen Standardeinstellungen vorhanden sind (dh der Parameter git-configbranch.autosetupmerge
ist true).Hinweis: Wenn es
origin/$BRANCH
noch nicht vorhanden ist, können Sie es erstellen, indem Sie Ihr lokales Verzeichnis$BRANCH
in das Remote-Repository verschieben mit:Gefolgt vom vorherigen Befehl, um den lokalen Zweig in einen Verfolgungszweig zu verwandeln.
quelle
git push origin $BRANCH
war das, wonach ich gesucht habe.git branch -f --track $BRANCH origin/$BRANCH
macht den Trick.1- Aktualisieren Sie Ihre lokalen Metadaten mit: git fetch --all
2- Zeigen Sie Ihre Remote- und lokalen Zweige mit: git branch -a , siehe folgenden Screenshot
3- Wechseln Sie zu dem Zielzweig, den Sie mit der Fernbedienung verknüpfen möchten: using
git checkout branchName
Beispiel:
4- Verknüpfen Sie Ihren lokalen Zweig mit einem Remote-Zweig, indem Sie:
Git-Zweig --set-upstream-to nameOfRemoteBranch
NB: nameOfRemoteBranch : zum Kopieren aus der Ausgabe von Schritt 2 "git branch -r"
Anwendungsbeispiel:
quelle
Stellen Sie sicher, dass Sie Folgendes ausführen:
störungsfrei schieben zu können
quelle
git-config(1)
Handbuchseite dastracking
Synonym veraltet istupstream
.Das Bearbeiten
.git/config
ist wahrscheinlich der einfachste und schnellste Weg. Genau das tun die Git-Befehle für den Umgang mit Remote-Zweigen.Wenn Sie nicht mit der Datei von Hand herumspielen möchten (und es ist nicht so schwer zu tun), können Sie es immer verwenden
git config
... aber auch hier wird die.git/config
Datei sowieso nur bearbeitet .Es gibt natürlich Möglichkeiten, einen Remote-Zweig bei der Verwendung automatisch zu verfolgen
git checkout
(--track
z. B. durch Übergeben des Flags), aber diese Befehle funktionieren mit neuen Zweigen, nicht mit vorhandenen.quelle
Kurz gesagt
Dadurch wird Ihr
yourLocalBranchName
Track zum Remote-Zweig namensdevelop
.quelle
git push -u origin branch
(oder--set-upstream-to
) stattdessen--set-upstream
und--track
? Ich verstehe nicht ganz, warum ich eins über das andere verwenden soll.Für 1.6.x kann dies mit dem Tool git_remote_branch durchgeführt werden :
Das wird Git veranlassen, den
foo
Track zu machenupstream/foo
.quelle
Ich verwende den folgenden Befehl (Angenommen, Ihr lokaler Filialname lautet "Filialname-lokal" und der Name der Remote-Filiale lautet "Filialname-remote"):
Wenn sowohl lokale als auch entfernte Zweige denselben Namen haben, gehen Sie einfach wie folgt vor:
quelle
Hier mit
github
undgit version 2.1.4
einfach tun:Und Fernbedienungen kommen von selbst, auch wenn sie nicht lokal verbunden sind:
Aber natürlich noch keine lokale Niederlassung:
Sehen? Wenn Sie jetzt nur die Entwicklung auschecken, wird die Magie automatisch ausgeführt:
So einfach!
Zusammenfassung. Führen Sie einfach diese 2 Befehle aus:
quelle
Verwenden Sie die Option '--track'
Nach einem
git pull
:git checkout --track <remote-branch-name>
Oder:
git fetch && git checkout <branch-name>
quelle
Zum Erstellen eines neuen Zweigs können Sie den folgenden Befehl verwenden
Verwenden Sie den folgenden Befehl, damit der bereits erstellte Zweig eine Verbindung zwischen Remote und dann von diesem Zweig her herstelltquelle
Dies ist keine direkte Antwort auf diese Frage, aber ich wollte hier eine Notiz für alle hinterlassen, die möglicherweise das gleiche Problem wie ich haben, wenn sie versuchen, einen Upstream-Zweig zu konfigurieren.
Seien Sie vorsichtig bei push.default .
Bei älteren Git-Versionen war die Standardeinstellung " Matching" , was zu sehr unerwünschtem Verhalten führen würde, wenn Sie beispielsweise Folgendes haben:
Tracking des lokalen Zweigs "Master" zum Ursprung / Master
Remote Branch "Upstream" Tracking zu Upstream / Master
Wenn Sie versuchen, "Push zu git", wenn Sie sich im Zweig "Upstream" befinden, würde git mit push.default automatisch versuchen, den lokalen Zweig "master" in "upstream / master" zusammenzuführen, was eine Menge Chaos verursacht.
Dies führt zu einem vernünftigeren Verhalten:
git config --global push.default upstream
quelle
In gewisser Weise habe ich versucht, einem vorhandenen Zweig einen Remote-Tracking-Zweig hinzuzufügen, hatte jedoch keinen Zugriff auf das Remote-Repository auf dem System, auf dem ich diesen Remote-Tracking-Zweig hinzufügen wollte (da ich häufig eine Kopie davon exportiere Repo über Sneakernet an ein anderes System, das Zugriff auf diese Fernbedienung hat). Ich stellte fest, dass es keine Möglichkeit gab, das Hinzufügen eines Remote-Zweigs zu dem noch nicht abgerufenen lokalen Zweig zu erzwingen (daher wusste local nicht, dass der Zweig auf dem Remote vorhanden war, und ich würde den Fehler erhalten :)
the requested upstream branch 'origin/remotebranchname' does not exist
.Am Ende gelang es mir, den neuen, bisher unbekannten Remote-Zweig (ohne Abrufen) hinzuzufügen, indem ich eine neue Head-Datei bei hinzufügte
.git/refs/remotes/origin/remotebranchname
und dann den Ref kopierte (Augapfel war am schnellsten, lahm wie es war ;-) vom System mit Zugriff auf den Ursprung Repo zur Workstation (mit dem lokalen Repo, auf dem ich den Remote-Zweig hinzugefügt habe).Sobald das erledigt war, konnte ich dann verwenden
git branch --set-upstream-to=origin/remotebranchname
quelle
oder einfach von:
Wechseln Sie in die Filiale, wenn Sie noch nicht in der Filiale sind:
Lauf
und Sie sind bereit:
Sie können sich immer die Konfigurationsdatei ansehen, um zu sehen, was was verfolgt, indem Sie Folgendes ausführen:
Es ist auch schön, das zu wissen. Es zeigt, welche Zweige verfolgt werden und welche nicht. ::
quelle
Für alle, die wie ich nur Ihren lokalen Filialnamen mit dem Namen der Remote-Filiale synchronisieren möchten, ist hier ein praktischer Befehl:
quelle
So vermeiden Sie, dass Sie sich jedes Mal daran erinnern, was Sie tun müssen, wenn Sie die Nachricht erhalten:
Sie können das folgende Skript verwenden, mit dem der Ursprung für den aktuellen Zweig, in dem Sie sich befinden, als Upstream festgelegt wird .
In meinem Fall habe ich so gut wie nie gesetzt etwas anderes als Ursprung als Standard - Upstream . Außerdem behalte ich fast immer den gleichen Filialnamen für den lokalen und den Remote-Zweig. Also passt folgendes zu mir:
quelle
Das würde auch funktionieren
quelle