Wie erstellt man einen Remote-Git-Zweig?

3129

Ich habe eine lokale Niederlassung erstellt, die ich stromaufwärts "pushen" möchte. Bei Stack Overflow gibt es eine ähnliche Frage zum Verfolgen eines neu erstellten Remote-Zweigs.

Mein Workflow ist jedoch etwas anders. Zuerst möchte ich eine lokale Niederlassung erstellen und diese erst dann nach oben verschieben, wenn ich zufrieden bin und meine Niederlassung freigeben möchte.

  • Wie würde ich das machen? (Meine Google-Suche schien nichts zu bringen).
  • Wie würde ich meinen Kollegen sagen, dass sie es aus dem Upstream-Repository abrufen sollen?

UPDATE Mit Git 2.0 gibt es eine einfachere Antwort, die ich unten geschrieben habe: https://stackoverflow.com/a/27185855/109305

Jesper Rønn-Jensen
quelle
14
Hat dir jemals jemand die zweite Frage beantwortet? >> Und wie würde ich meinen Kollegen sagen, dass sie es aus dem Upstream-Repository ziehen sollen?
Milchplus
Möglicherweise verwandt: Pro Git: 3.5 Git Branching - Remote Branches .
1
@milkplus ruft get fetch --alldie neuen Zweige auf der Remote-Seite ab (aber nur a get fetch --prunelöscht lokal die Verweise auf die gelöschten Remote-Zweige). Ich denke, entweder sollte dies automatisch von ihnen eingerichtet werden, oder Sie müssen mündlich mit ihnen sprechen.
Peterh

Antworten:

3732

Zunächst erstellen Sie Ihre Niederlassung lokal:

git checkout -b <branch-name> # Create a new branch and check it out

Der Remote-Zweig wird automatisch erstellt, wenn Sie ihn auf den Remote-Server übertragen. Wenn Sie sich dazu bereit fühlen, können Sie einfach Folgendes tun:

git push <remote-name> <branch-name> 

Wo <remote-name>ist normalerweise originder Name, den Git der Fernbedienung gibt, von der Sie geklont haben. Ihre Kollegen würden dann einfach diesen Zweig ziehen und er wird automatisch lokal erstellt.

Beachten Sie jedoch, dass das Format formal wie folgt lautet:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Wenn Sie jedoch einen weglassen, wird davon ausgegangen, dass beide Zweignamen gleich sind. Nachdem dies gesagt ist, als ein Wort der Vorsicht , nicht über die kritischen Fehler machen nur die Angabe :<remote-branch-name>(mit dem Doppelpunkt), oder der Remote - Zweig wird gelöscht!

Damit ein nachfolgender git pullBenutzer weiß, was zu tun ist, möchten Sie möglicherweise stattdessen Folgendes verwenden:

git push --set-upstream <remote-name> <local-branch-name> 

Wie unten beschrieben, --set-upstreamrichtet die Option einen Upstream-Zweig ein:

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) und anderen Befehlen ohne Argumente verwendet wird.

Ikke
quelle
85
Beachten Sie, dass das Standardverhalten von git darin besteht, übereinstimmende Refs zu pushen , sodass git push <remote>der Zweig nicht gepusht wird, wenn er nicht vorhanden ist <remote>.
Jakub Narębski
222
Möglicherweise möchten Sie git push -u <remote-name> <branch-name>stattdessen verwenden, damit ein nachfolgender git pullBenutzer weiß, was zu tun ist.
Bart Schuller
87
Anstatt den Servernamen explizit anzugeben, können Sie einfach origin"den Server verwenden , von dem ich den Rest dieses Repos erhalten habe": also git push origin <branch-name>.
Lambshaanxy
68
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
90
Alles zusammen zu setzen, git push -u origin <local-branch-name>hat für mich funktioniert.
Samo
881

Zunächst müssen Sie Ihren Zweig lokal erstellen

git checkout -b your_branch

Danach können Sie lokal in Ihrer Filiale arbeiten. Wenn Sie bereit sind, die Filiale freizugeben, drücken Sie sie. Mit dem nächsten Befehl wird der Zweig zum Ursprung des Remote-Repositorys verschoben und verfolgt

git push -u origin your_branch

Teamkollegen können Ihre Niederlassung erreichen, indem Sie Folgendes tun:

git fetch
git checkout origin/your_branch

Sie können in der Verzweigung weiterarbeiten und pushen, wann immer Sie möchten, ohne Argumente an git push zu übergeben (argumentless git push pusht den Master an den Remote-Master, your_branch local an remote your_branch usw.)

git push

Teamkollegen können durch Commits in Ihre Filiale pushen und dann explizit pushen

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Oder verfolgen Sie den Zweig, um die Argumente für Git Push zu vermeiden

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push
dseminara
quelle
Gibt es eine Möglichkeit, einen Remote-Zweig zu erstellen, ohne einen lokalen Zweig mit demselben Namen zu erstellen?
Ariel Gabizon
330

Einfache Git 2.0+ Lösung:

Ab Git 2.0 ist das Verhalten einfacher geworden :

Sie können git mit konfigurieren push.default = current, um das Leben einfacher zu machen:

Ich habe dies hinzugefügt, damit ich jetzt einfach einen neuen Zweig mit nach oben schieben kann

$ git push -u

-uverfolgt den gleichnamigen Remote-Zweig. Mit dieser Konfiguration erraten Sie nun automatisch die Remote-Referenz für Git Push. Aus der Dokumentation zu git.config :

push.default

Definiert die Aktion, die git push ausführen soll, wenn keine explizite Referenz angegeben wird.

push.default = current- Drücken Sie auf den aktuellen Zweig, um einen Zweig mit demselben Namen auf der Empfangsseite zu aktualisieren. Funktioniert sowohl in zentralen als auch in nicht zentralen Workflows.

Für mich ist dies eine gute Vereinfachung meines täglichen Git-Workflows. Die Konfigurationseinstellung berücksichtigt den "üblichen" Anwendungsfall, in dem Sie einen Zweig lokal hinzufügen und ihn remote erstellen möchten. Außerdem kann ich genauso einfach lokale Zweige aus Fernbedienungen erstellen, indem ich dies einfach mache git co remote_branch_name(im Gegensatz zur Verwendung von --set-upstream-toFlag).

Ich weiß, dass diese Frage und die akzeptierten Antworten ziemlich alt sind, aber das Verhalten hat sich geändert, sodass jetzt Konfigurationsoptionen vorhanden sind, um Ihren Workflow zu vereinfachen.

Führen Sie dies in der Befehlszeile aus, um es Ihrer globalen Git-Konfiguration hinzuzufügen:

$ git config --global push.default current
Jesper Rønn-Jensen
quelle
5
Ich finde, git push -u origin HEADwie hier beantwortet , etwas ausführlicher (Sie schreiben, was Sie tun), ohne zu viel zu tippen. Außerdem hat ein git push -uohne zusätzliche Argumente für mich nicht funktioniert, wenn der Zweig mit-t
Qw3ry
git config --global push.default upstream && git checkout -b foo && <change a file> && git push -ufunktioniert nicht (ab Git 2.19.1); push erfordert die Argumente remote und branch.
Stricken
Könnten Sie erweitern, was Sie damit meinen git co remote_branch_name?
Flanellbart
84

Wie in den vorherigen Antworten angegeben,

git push <remote-name> <local-branch-name>:<remote-branch-name>

reicht aus, um eine lokale Niederlassung zu pushen.

Ihre Kollegen können mit diesem Befehl alle Remote-Zweige (einschließlich neuer) abrufen:

git remote update

Um dann Änderungen am Zweig vorzunehmen, wird der übliche Ablauf ausgeführt:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
Lucian
quelle
Ich mag diese Sache, weil der Remote-Name anders sein kann als der lokale
Ariel Gabizon
66

Erstellen Sie lokal einen neuen Zweig basierend auf dem aktuellen Zweig:

git checkout -b newbranch

Übernehmen Sie alle Änderungen wie gewohnt. Schieben Sie es dann stromaufwärts:

git push -u origin HEAD

Dies ist eine Verknüpfung, mit der Sie den aktuellen Zweig in einen gleichnamigen Zweig verschieben originund verfolgen können, damit Sie ihn origin HEADin Zukunft nicht mehr angeben müssen .

Zenexer
quelle
4
Dies hat in meinem Fall geholfen : git push -u origin HEAD. Ich denke, es ist der klarste Weg.
Scadge
2
Ja, Sie erinnern sich nie genau daran, was Sie zuletzt als Zweig eingegeben haben. Das ist also der richtige Weg.
Marksyzm
4
@marksyzm Wenn Sie sich nicht erinnern können, in welchem ​​Zweig Sie sich befinden oder wie Sie ihn benannt haben, sollten Sie wahrscheinlich überhaupt nicht pushen! Zumindest nicht ohne git statusvorher zu rennen .
Zenexer
1
Ja, ich muss sicherstellen, dass die Welt bei diesem Stoß nicht explodiert. Genau.
Marksyzm
1
Dies ist der effizienteste Weg, um gleichzeitig einen Tracking-Zweig sowie einen Remote-Zweig zu erstellen. Ich möchte auch git remote show originals dritten Schritt hinzufügen , um die neue Tracking / Tracking-Beziehung zu visualisieren.
hb5fa
54

Wenn Sie einen Zweig aus dem aktuellen Zweig erstellen möchten

git checkout -b {your_local_branch_name} 

Wenn Sie einen Zweig von einem Remote-Zweig möchten, können Sie es versuchen

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Wenn Sie mit den Änderungen fertig sind, können Sie die Datei hinzufügen.

git add -A or git add <each_file_names>

Führen Sie dann ein lokales Commit durch

git commit -m 'your commit message'

Wenn Sie zum Remote-Repo wechseln möchten

git push -u origin <your_local_branch_name>

Alles zusammen wird sein

git checkout -b bug_fixes 

oder Wenn Sie einen Zweig aus einem Remote-Zweig erstellen möchten, sagen Sie Entwicklung

git checkout -b bug_fixes Ursprung / Entwicklung

Sie können auf die Filiale zum Remote-Repo von drücken

git push -u origin bug_fixes

Immer wenn Sie Ihren Zweig von einem anderen Zweig aus aktualisieren möchten, sagen Sie Master .

git pull origin master.

sreekumar
quelle
46

Wenn Sie tatsächlich nur einen Remote-Zweig erstellen möchten, ohne den lokalen zu haben, können Sie dies folgendermaßen tun:

git push origin HEAD:refs/heads/foo

Es drückt alles, was Ihr KOPF ist, in den Zweig foo , der auf der Fernbedienung nicht vorhanden war.

Tassadar
quelle
Dadurch wurde mein Visual Studio so verwirrt, dass es nicht mehr richtig gestartet werden konnte. Der Team Explorer würde überhaupt nicht geladen, aber alles andere ging schief und warf auch Fehler. Nur zu deiner Information.
Josh
Das hört sich so an, als ob es funktionieren sollte, aber als ich es tatsächlich ausprobierte, erkannte unser Gitlab-Server das Ergebnis nicht als Zweig.
JosephH
Von welchem ​​Zweig ist foo auf der Fernbedienung abgezweigt? Was wäre, wenn ich foo wollte, um von foo2 abzweigen? Ist das möglich? Vielen Dank.
user674669
Es funktioniert auch auf dem Gerrit-Server und erstellt einen neuen Zweig auf der Fernbedienung, der vor diesem Befehl nicht vorhanden war.
MichaelZ
33

Einfachste Lösung ... Drumm Roll ... Git Version 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

Hinweis: Der Zweig, den Sie gerade in Ihrer lokalen Umgebung erstellt haben, und der nicht vorhandene Remote-Zweig, in den Sie Pushen möchten, müssen denselben Namen haben .

sapy
quelle
3
Danke für Ihren Vorschlag. Auch wenn Sie dies eine einfache Lösung nennen, denke ich immer noch, dass git push -ues viel einfacher ist. Erfordert, dass Sie eine globale Konfigurationszeile haben, siehe stackoverflow.com/a/27185855/109305 . Ich benutze git push -uständig, es deckt 99% meiner Anwendungsfälle bei der Arbeit ab.
Jesper Rønn-Jensen
29

[Schnelle Antwort]

Sie können es in 2 Schritten tun:

1. Verwenden Sie checkoutzum Erstellen des lokalen Zweigs:

git checkout -b yourBranchName

2. Verwenden Sie den pushBefehl, um den Zweig automatisch zu erstellen und den Code an das Remote-Repository zu senden:

git push -u origin yourBanchName

Es gibt mehrere Möglichkeiten, dies zu tun, aber ich denke, dass dieser Weg wirklich einfach ist.

Javier C.
quelle
1
Schnell und auf den Punkt!
Dev
26

Zuerst erstellen Sie den Zweig lokal:

git checkout -b your_branch

Und dann, um den Zweig aus der Ferne zu erstellen:

git push --set-upstream origin your_branch

Hinweis: Dies funktioniert mit den neuesten Versionen von git:

$ git --version
git version 2.3.0

Prost!

Ipegasus
quelle
Dies ist nur der Hilfetext, der vom Befehl generiert wird, git pushwenn Ihr lokaler Zweig nicht von einer Fernbedienung verfolgt wird.
Nurettin
18

Erstellen Sie den Zweig auf Ihrem lokalen Computer und wechseln Sie in diesen Zweig:

$ git checkout -b [name_of_your_new_branch]

Schieben Sie den Ast auf Github:

$ git push origin [name_of_your_new_branch]

Wenn Sie etwas in Ihrer Niederlassung festschreiben möchten, müssen Sie sich in Ihrer Niederlassung befinden.

Sie können alle Zweige anzeigen, die erstellt wurden mit:

$ git branch

Welches wird zeigen:

* approval_messages
  master
  master_clean

Fügen Sie eine neue Fernbedienung für Ihre Niederlassung hinzu:

$ git remote add [name_of_your_remote] 

Übertragen Sie Änderungen aus Ihrem Commit in Ihre Filiale:

$ git push origin [name_of_your_remote]

Aktualisieren Sie Ihren Zweig, wenn der ursprüngliche Zweig aus dem offiziellen Repository aktualisiert wurde:

$ git fetch [name_of_your_remote]

Dann müssen Sie sich bewerben, um Änderungen zusammenzuführen. Wenn Ihr Zweig von der Entwicklung abgeleitet ist, müssen Sie Folgendes tun:

$ git merge [name_of_your_remote]/develop

Löschen Sie einen Zweig in Ihrem lokalen Dateisystem:

$ git branch -d [name_of_your_new_branch]

So erzwingen Sie das Löschen eines lokalen Zweigs in Ihrem Dateisystem:

$ git branch -D [name_of_your_new_branch]

Löschen Sie den Zweig auf Github:

$ git push origin :[name_of_your_new_branch]

Hier alle Informationen

Anderes bestehendes Projekt

Numan Turkeri
quelle
14

Erstellen eines lokalen Zweigs aus einem vorhandenen Zweig (kann Master / Develop / Any-Other-Branch sein).

git checkout -b branch_name

Schieben Sie dies zur Fernbedienung

git push -u remote_name local_branch_name: remote_branch_name

Hier,

  1. -u: Legt den Upstream-Zweig fest
  2. remote_name: git setzt den Namen standardmäßig auf "origin", wenn das Repository erstellt wird. Dies kann jedoch in einen anderen beliebigen Namen geändert werden.
  3. local_branch_name: ist der Name des lokalen Zweigs, der gepusht werden soll.
  4. remote_branch_name: ist der Name des Remote-Zweigs, der auf Remote erstellt werden soll.

Wenn wir die lokalen und Remote-Zweigstellennamen entfernen, hat dies das Format

git push -u remote_name branch_name

Dadurch wird der lokale Zweig auf Remote und mit demselben Namen wie der lokale Zweig verzweigt. Die lokale Niederlassung verfolgt auch die entfernte Niederlassung.

iosCurator
quelle
10

Ich weiß, dass diese Frage gut beantwortet ist, wollte aber nur die Schritte auflisten, die ich unternehme, um einen neuen Zweig "myNewBranch" zu erstellen und auf remote (in meinem Fall "origin") zu pushen und das Tracking einzurichten. Betrachten Sie dies als die "TL; DR" -Version :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch
Sufinawaz
quelle
8

Mit git können Sie jetzt einfach eingeben, wenn Sie sich im richtigen Zweig befinden

git push --set-upstream origin <remote-branch-name>

und git erstellen für Sie den Ursprungszweig.

Maurizio Brioschi
quelle
1
-u ist die Abkürzung für --set-upstream. Der Befehl könnte also git push sein. -u origin <remote-branch-name>
Ungefangene Ausnahme
fatal: 'origin' scheint kein Git-Repository zu sein
Dmitry Grinko
Vielleicht müssen Sie den Ursprung Ihres Git-Repository festlegen
Maurizio Brioschi
8

Ich wollte das nur hinzufügen, während:

git checkout -b {branchName}

Erstellt einen neuen Zweig und überprüft diesen Zweig / macht ihn zu Ihrem aktuellen Zweig. Wenn Sie aus irgendeinem Grund nur einen Zweig abbrechen, ihn aber nicht zu Ihrem aktuellen Zweig machen möchten, verwenden Sie den folgenden Befehl:

git branch {branchName}

Im ersten Befehl macht "Auschecken" diesen Zweig zu Ihrem aktuellen Zweig, und das "-b" bedeutet: Dieser Zweig existiert noch nicht, also machen Sie es für mich.

Brian Sachetta
quelle
6

Vorgehensweise über den Quellbaum

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)
Monis Majeed
quelle
5

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:

gebrochener Fuß
quelle
3

Hier ist, wie Sie es in Eclipse durch Egit tun.

1) Gehen Sie zur Ansicht "Git Repository Exploring" und erweitern Sie das Git-Projekt, zu dem Sie einen Zweig erstellen möchten. Wählen Sie unter Brances -> Local .. den Zweig aus, für den Sie den Zweig erstellen möchten (in meinem Fall habe ich master ausgewählt .. Sie können einen anderen Zweig auswählen, wenn Sie möchten). Klicken Sie dann mit der rechten Maustaste und klicken Sie auf die Option Branch Branch erstellen. Wählen Sie die Option Dieses Projekt auschecken und klicken Sie dann auf die Schaltfläche Fertig stellen.

2) Wählen Sie nun im Projektexplorer das Projekt aus. Klicken Sie mit der rechten Maustaste und dann auf Team -> Push Branch.

Ein neuer Remote-Zweig wird erstellt. Sie können Ihren Kollegen den Namen der Niederlassung geben, damit sie sie abrufen können.

user2225713
quelle
Tangentiale Warnung zu Egit - und allen JGit-basierten Clients, AFAIK: Sie unterstützen keine .gitattributes! Wenn Ihr Team eine Mischung aus Windows (CRLF) und Linux / OSX (LF) verwendet, müssen Sie sich darauf verlassen, dass jeder Client jederzeit über die richtigen Einstellungen verfügt. Natürlich ist es besser, Zeilenenden zentral auf Repo- oder Projektebene zu verwalten, und .gitattributes ist die unterstützte Methode, um dies zu tun. Also, wenn Sie Egit nicht unbedingt verwenden müssen ... nicht! :)
zweiwöchentlich
2

Ich habe zwei Möglichkeiten verwendet, um einen Zweig zu erstellen

Wenn Sie TortoiseGit verwenden, gehen Sie folgendermaßen vor: -

1.Erstellen Sie Branch mit TortoiseGit

Klicken Sie mit der rechten Maustaste auf Ihr Projekt >>> TortoiseGit >>> Zweig erstellen >>> Schreiben Sie den Namen des Zweigs und wählen Sie den Basiszweig aus. Drücken Sie dann OK

2.Drücken Sie den Zweig

Klicken Sie mit der rechten Maustaste auf Ihr Projekt >>> TortoiseGit >>> drücken Sie >>> klicken Sie auf OK

3.Schalten Sie zu neuem Zweig um

Klicken Sie mit der rechten Maustaste auf Ihr Projekt >>> TortoiseGit >>> Switch / Checkout >>> Wählen Sie einen neu erstellten Zweig aus und drücken Sie OK

Wenn Sie die Eingabeaufforderung verwenden, gehen Sie folgendermaßen vor: -

1.Erstellen Sie einen Zweig mit der Eingabeaufforderung

$ git checkout -b neuer_zweigname

2.Drücken Sie den Zweig

$ git push origin new_branch_name

3. Wechseln Sie zu einem neuen Zweig, der bereits zu new_branch_name wechselt, andernfalls können Sie ihn verwenden

$ git checkout new_branch_name

Mandeep Singh Gill
quelle
0

Ich benutze dies und es ist ziemlich praktisch:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Verwendung: git mkdir NEW_BRANCH

Sie brauchen nicht einmal den Git-Status. Vielleicht möchte ich nur sicherstellen, dass alles gut läuft ...

Sie können sowohl den Zweig LOCAL als auch den Zweig REMOTE mit einem einzigen Befehl haben.

Tarik
quelle