Wie pushen Sie nur einen einzelnen Git-Zweig (und keine anderen Zweige)?

247

Ich arbeite an einem lokalen Git-Repository. Es gibt zwei Zweige masterund feature_x.

Ich möchte auf feature_xdas Remote-Repo übertragen, aber ich möchte die Änderungen nicht auf den masterZweig übertragen.

Funktioniert ein Zweig git push origin feature_xaus meinem feature_xZweig ( feature_xZweig existiert bereits auf Remote)?

Ich möchte dies nicht auf meiner Box testen, da ich momentan nicht auf Master drücken kann.

Rafael Mueller
quelle
Schauen Sie hier: Remote und hier: Schieben Sie einen Zweig auf Github. Klingt so, als würde es funktionieren.
al.

Antworten:

376

Ja, machen Sie einfach Folgendes

git checkout feature_x
git push origin feature_x
cpjolicoeur
quelle
54
Mit modernem Git sollten Sie in der Lage sein, einfach "Git Push Origin HEAD" oder sogar "Git Push HEAD" zu verwenden, um nur den aktuell ausgecheckten Zweig zu pushen.
Jakub Narębski
2
Muss ich auf feature_x auschecken?
hd.
5
Ja, denn wenn Sie auf Master sind, wird versucht, den lokalen Master-Zweig in den Remote-Zweig feature_x zu verschieben. Um nicht zuerst auschecken zu müssen, müssten Sie "git push origin feature_x: feature_x"
ausführen
1
@cpjolicoeur Ich habe in anderen Fragen gesehen (zB: hier ), die sie machen git push -u origin <branch-name>. Sie haben es jedoch nicht erwähnt. Ist es nötig ?
Riroo
3
@miss_R Die -uOption für einen git-pushBefehl legt die Upstream-Referenz für die Verfolgung des gerade geschobenen Zweigs fest. Dadurch git-pullwissen Dinge wie in diesem Zweig in Zukunft bereits, aus welchem ​​Zweig gezogen werden soll, ohne ihn anzugeben. Es ist nicht als Option erforderlich, einen einzelnen Zweig zu pushen, wird jedoch häufig verwendet, da viele Benutzer möchten, dass der lokale Zweig den entfernten Zweig verfolgt, den sie pushen.
cpjolicoeur
74

Standardmäßig werden git pushalle Remote-Zweige aktualisiert. Sie können git jedoch so konfigurieren, dass nur der aktuelle Zweig auf den Upstream aktualisiert wird.

git config push.default upstream

Dies bedeutet, dass git nur den aktuellen (ausgecheckten) Zweig aktualisiert, wenn Sie git push ausführen.

Andere gültige Optionen sind:

  • nothing: Drücken Sie nichts (Fehler raus), es sei denn, es wird ausdrücklich eine Referenz angegeben . Dies ist in erster Linie für Menschen gedacht, die Fehler vermeiden wollen, indem sie immer explizit sind.
  • matchingSchieben alle Zweige der HAVING: gleichnamigen an beiden Enden. (Standardoption vor Version 1.7.11)
  • upstream: Schieben Sie den aktuellen Zweig in den vorgelagerten Zweig. Dieser Modus ist nur dann sinnvoll, wenn Sie auf dasselbe Repository pushen, aus dem Sie normalerweise abrufen würden (dh zentralen Workflow ). Es ist nicht erforderlich, dass der lokale und der Remote-Zweig denselben Namen haben .
  • tracking: Veraltet, upstreamstattdessen verwenden.
  • currentDrücken Sie den Stromzweig an den entfernten Zweig der: gleichnamigen auf der Empfängerseite. Funktioniert sowohl in zentralen als auch in nicht zentralen Workflows.
  • simple: [verfügbar seit Version 1.7.11] Arbeiten Sie im zentralisierten Workflow wie upstreammit einer zusätzlichen Sicherheit, um das Drücken zu verweigern, wenn sich der Name des Upstream-Zweigs vom lokalen unterscheidet. Wenn Sie auf eine Fernbedienung drücken, die sich von der Fernbedienung unterscheidet, von der Sie normalerweise ziehen, arbeiten Sie als current. Dies ist die sicherste Option und für Anfänger geeignet. Dieser Modus ist in Git 2.0 zum Standard geworden.
Karthik Bose
quelle
2
Danke, currentwar das , wonach ich gesucht habe, standardmäßig wird es in der Filiale git pushin die fooFiliale verschoben origin/foo.
Dorian
@ Dorian danke, ich stimme zu, dass dies currentstandardmäßig sinnvoller ist.
Zoltán
@Dorian, @ Zoltán - Ich halte es simplestandardmäßig für sinnvoller. Ich habe die Antwort mit "Wann soll was verwendet werden" aktualisiert. Bitte schauen Sie.
Karthik Bose
1
Hinweis: Seit Git Version 2 hat sich der Standardwert in geändert simple.
Danijel
8

Kleines Update zusätzlich zu Karthik Boses Antwort - Sie können git global konfigurieren, damit sich alle Ihre Arbeitsbereiche so verhalten:

git config --global push.default upstream
Bhaskar
quelle
Upstream wurde nicht als gültige Einstellung für mich erkannt, musste stattdessen "aktuell" setzen
Grashüpfer
-2

Nehmen wir also an, Sie haben einen lokalen Zweig foo, einen Remote namens origin und einen Remote branch origin / master.

Um den Inhalt von foo auf origin / master zu verschieben, müssen Sie zuerst den Upstream einstellen:

git checkout foo
git branch -u origin/master

Dann können Sie zu diesem Zweig pushen, indem Sie:

git push origin HEAD:master

Im letzten Befehl können Sie --force hinzufügen, um die gesamte Herkunfts- / Master-Historie durch die von foo zu ersetzen.

CodeKid
quelle