it-swarm.com.de

Einen vorhandenen Git-Zweig zu einem entfernten Zweig machen?

Ich weiß, wie man einen neuen Zweig erstellt, der entfernte Zweige verfolgt, aber wie mache ich einen vorhandenen Zweig zu einem entfernten Zweig?

Ich weiß, dass ich nur die .git/config -Datei bearbeiten kann, aber es scheint, dass es einen einfacheren Weg geben sollte.

3375
Pat Notz

Eine Verzweigung foo und eine entfernte upstream gegeben:

Ab Git 1.8.0:

git branch -u upstream/foo

Oder wenn der lokale Zweig foo nicht der aktuelle Zweig ist:

git branch -u upstream/foo foo

Wenn Sie längere Befehle eingeben möchten, entsprechen diese den beiden oben genannten Befehlen:

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

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

Ab Git 1.7.0:

git branch --set-upstream foo upstream/foo

Anmerkungen:

  • Alle obigen Befehle veranlassen den lokalen Zweig foo, den fernen Zweig foo vom fernen upstream aus zu verfolgen.
  • Die alte (1.7.x) Syntax wird zugunsten der neuen (1.8+) Syntax nicht mehr empfohlen. Die neue Syntax soll intuitiver und leichter zu merken sein.
  • Das Definieren des Upstream schlägt mit neu erstellten Remotes fehl, die nicht abgerufen wurden. Führen Sie in diesem Fall vorher git fetch upstream aus.

Siehe auch: Warum muss ich "--set-upstream" die ganze Zeit ausführen?

4108
Dan Moulding

Sie können Folgendes tun (vorausgesetzt, Sie sind auf dem Master ausgecheckt und möchten auf einen Remote-Zweig-Master pushen):

Richten Sie die 'Fernbedienung' ein, falls Sie sie noch nicht haben

git remote add Origin ssh://...

Konfigurieren Sie nun den Master so, dass er weiß, wie er verfolgt:

git config branch.master.remote Origin
git config branch.master.merge refs/heads/master

Und Push:

git Push Origin master
230
Paul Hedderly

Ich mache dies als Nebeneffekt des Drückens mit der Option -u wie in

$ git Push -u Origin branch-name

Die äquivalent lange Option ist --set-upstream.

Der Befehl git-branch versteht auch --set-upstream, aber seine Verwendung kann verwirrend sein. Version 1.8. ändert die Schnittstelle.

git branch --set-upstream ist veraltet und wird möglicherweise in relativ ferner Zukunft entfernt. git branch [-u|--set-upstream-to] wurde mit einer vernünftigeren Reihenfolge von Argumenten eingeführt.

Es war verlockend, git branch --set-upstream Origin/master zu sagen, aber das veranlasst Git, den lokalen Zweig "Origin/master" so einzurichten, dass er in den derzeit ausgecheckten Zweig integriert wird, was vom Benutzer höchst unwahrscheinlich ist. Die Option ist veraltet. Verwenden Sie stattdessen die neue Option --set-upstream-to (mit einem kurzen und süßen -u).

Angenommen, Sie haben eine lokale foo Verzweigung und möchten, dass sie die Verzweigung mit demselben Namen wie die vorgelagerte behandelt. Mach das möglich mit

$ git branch foo
$ git branch --set-upstream-to=Origin/foo

oder nur

$ git branch --set-upstream-to=Origin/foo foo
152
Greg Bacon

Möglicherweise ist das Tool git_remote_branch hilfreich. Es bietet einfache Befehle zum Erstellen, Veröffentlichen, Löschen, Verfolgen und Umbenennen von Zweigstellen. Eine nette Funktion ist, dass Sie einen grb -Befehl fragen können, um zu erklären, welche git-Befehle er ausführen würde.

_grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git Push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
_
53
James Mead

Eigentlich für die akzeptierte Antwort zu arbeiten:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
51
Hedgehog

Ich glaube, dass Sie schon in Git 1.5.x eine lokale Verzweigung $BRANCH nachverfolgen können, die eine entfernte Verzweigung Origin/$BRANCH ist.

Vorausgesetzt, dass $BRANCH und Origin/$BRANCH existieren und Sie $BRANCH noch nicht ausgecheckt haben (wechseln Sie, wenn Sie dies getan haben), tun Sie Folgendes:

git branch -f --track $BRANCH Origin/$BRANCH

Dadurch wird $BRANCH als Verfolgungszweig neu erstellt. Der -f erzwingt die Erstellung, obwohl $BRANCH bereits vorhanden ist. --track ist optional, wenn die üblichen Standardeinstellungen vorhanden sind (d. H. Der git-config-Parameter branch.autosetupmerge ist true).

Hinweis: Wenn Origin/$BRANCH noch nicht vorhanden ist, können Sie es erstellen, indem Sie Ihr lokales $BRANCH in das Remote-Repository verschieben:

git Push Origin $BRANCH

Gefolgt von dem vorherigen Befehl, um den lokalen Zweig in einen Verfolgungszweig umzuwandeln.

42
wu-lee

1- Aktualisieren Sie Ihre lokalen Metadaten mit: git fetch --all

enter image description here

2- Zeigen Sie Ihre entfernten und lokalen Zweige mit: git branch -a , siehe folgenden Screenshot

enter image description here

3- Wechseln Sie zu dem Zielzweig, den Sie mit der Fernbedienung verknüpfen möchten: using

git checkout branchName

beispiel:

enter image description here

4- Verknüpfen Sie Ihre lokale Niederlassung mit einer Remote-Niederlassung unter Verwendung von:

Git-Zweig --set-upstream-to nameOfRemoteBranch

N.B: nameOfRemoteBranch : zum Kopieren aus der Ausgabe von Schritt 2 "git branch -r"

Anwendungsbeispiel:

enter image description here

33

Stellen Sie sicher, dass Sie Folgendes ausführen:

git config Push.default tracking

störungsfrei pushen zu können

22
romanlv

Das Bearbeiten von .git/config ist wahrscheinlich der einfachste und schnellste Weg. Das ist sowieso, was die Git-Befehle für den Umgang mit entfernten Verzweigungen tun.

Wenn Sie nicht von Hand mit der Datei herumspielen möchten (und das ist nicht so schwer), können Sie immer git config verwenden, um dies zu tun ... aber auch hier wird die .git/config-Datei nur bearbeitet.

Es gibt natürlich Möglichkeiten, einen entfernten Zweig automatisch zu verfolgen, wenn git checkout verwendet wird (z. B. durch Übergeben des Flags --track), aber diese Befehle funktionieren mit new Zweigen, die nicht vorhanden sind.

21
mipadi

Kurz gesagt

git branch --set-upstream yourLocalBranchName Origin/develop

Dadurch verfolgt Ihr yourLocalBranchName den entfernten Zweig mit dem Namen develop.

16
MadNik

Für 1.6.x kann dies mit dem Tool git_remote_branch erfolgen:

grb track foo upstream

Das wird Git veranlassen, fooupstream/foo aufzuspüren.

14
wik

Ich verwende den folgenden Befehl (Angenommen, Ihr lokaler Filialname lautet "Filialname-lokal" und der Name der fernen Filiale lautet "Filialname-fern"):

$ git branch --set-upstream-to=Origin/branch-name-remote branch-name-local

Wenn sowohl lokale als auch ferne Zweige denselben Namen haben, gehen Sie wie folgt vor:

$ git branch --set-upstream-to=Origin/branch-name branch-name
9
yrazlik

Hier können Sie mit github und git version 2.1.4 Folgendes tun:

$ git clone [email protected]:user/repo.git

Und Fernbedienungen kommen von itelsef, auch wenn sie nicht lokal verknüpft sind:

$ git remote show Origin

* remote Origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git Push':
    master pushes to master (up to date)

Aber natürlich noch keine Ortsniederlassung:

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Sehen? Wenn Sie jetzt nur Develp auschecken, wird die Magie automatisch ausgeführt:

$ git checkout develop
Branch develop set up to track remote branch develop from Origin.
Switched to a new branch 'develop'

So einfach!


Zusammenfassung. Führen Sie einfach diese 2 Befehle aus:

$ git clone [email protected]:user/repo.git
$ git checkout develop
8
Dr Beco

Verwenden Sie die Option "--track"

  • Nach einem git pull:

    git checkout --track <remote-branch-name>

  • Oder:

    git fetch && git checkout <branch-name>

8
Loukan ElKadi

Zum Erstellen eines neuen Zweigs können Sie den folgenden Befehl verwenden

 git checkout --track -b Beispiel Herkunft/Beispiel 

 Git Branch -u Origin/Remote-Branch-Name
7
jithu reddy

Dies ist keine direkte Antwort auf diese Frage, aber ich wollte hier eine Notiz für alle hinterlassen, die möglicherweise das gleiche Problem haben wie ich, wenn sie versuchen, einen Upstream-Zweig zu konfigurieren.

Seien Sie vorsichtig mit 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:

Lokale Verzweigung "Master" -Verfolgung zu Origin/Master

Remote Branch "Upstream" Tracking zu Upstream/Master

Wenn Sie im "Upstream" -Zweig "git Push" verwenden, würde mit Push.default matching git automatisch versuchen, den lokalen Zweig "master" in "upstream/master" zusammenzuführen, was zu einem Ganzen führt viel Chaos.

Dies führt zu einem vernünftigeren Verhalten:

git config --global Push.default upstream

5
Tom Mettam

In ähnlicher Weise habe ich versucht, einer vorhandenen Verzweigung eine Remote-Verfolgungsverzweigung hinzuzufügen, hatte jedoch keinen Zugriff auf das Remote-Repository auf dem System, auf dem ich diese Remote-Verfolgungsverzweigung hinzufügen wollte (da ich häufig eine Kopie davon exportiere) Repo über Sneakernet zu einem anderen System, das Zugriff auf Push zu dieser Fernbedienung hat). Ich stellte fest, dass es keine Möglichkeit gab, dem noch nicht abgerufenen lokalen Zweig einen fernen Zweig hinzuzufügen (so wusste local nicht, dass der Zweig auf dem fernen Zweig 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 entfernten Zweig (ohne Abrufen) hinzuzufügen, indem ich eine neue Kopfdatei bei .git/refs/remotes/Origin/remotebranchname hinzufügte und dann den Verweis kopierte (Augenzwinkern war am schnellsten, so lahm es war ;-) vom System) mit Zugriff auf das Origin-Repo auf die Workstation (mit dem lokalen Repo, auf dem ich den Remote-Zweig hinzugefügt habe).

Sobald dies erledigt war, konnte ich git branch --set-upstream-to=Origin/remotebranchname verwenden.

4
Ville

oder einfach per:

wechseln Sie in den Zweig, wenn Sie noch nicht dort sind:

[za]$ git checkout branch_name

lauf

[za]$ git branch --set-upstream Origin branch_name
Branch Origin set up to track local branch brnach_name by rebasing.

und du bist bereit für:

 [za]$ git Push Origin branch_name

Sie können sich die Konfigurationsdatei ansehen, um zu sehen, was verfolgt wird, indem Sie Folgendes ausführen:

 [za]$ git config -e

Es ist auch schön zu wissen, dass es zeigt, welche Zweige verfolgt werden und welche nicht. :

  [za]$ git remote show Origin 
3
zee

Für alle, die wie ich nur Ihren lokalen Filialnamen mit dem Namen der entfernten Filiale synchronisieren möchten, gibt es folgenden praktischen Befehl:

git branch -u Origin/$(git rev-parse --abbrev-ref HEAD)
1
Constantinos