Git Push zu einem bestimmten Zweig

101

Selbst nachdem ich diese Frage gelesen habe: git-push-current-branch , habe ich immer noch Schwierigkeiten herauszufinden, wie ich meinen git push-Befehl schreiben soll. Wie im Fragenlink erwähnt, ist dies aus der Dokumentation nicht ersichtlich.

Ich möchte mein Beispiel aus der realen Welt verwenden. Folgendes sehe ich, wenn ich einen git statusBefehl auf der obersten Ebene meines Zweigs ausführe:

Auf Zweig amd_qlp_tester

Ihre Filiale liegt 5 Commits vor 'origin / amd_qlp_tester'.

etc...

Mein Filialname ist also, amd_qlp_testeraber er wurde vom Hauptzweig "verzweigt" (wenn ich die Begriffe falsch habe, liegt das an meinem SVN-Hintergrund). Dann gibt es aber auch den Namen "origin / amd_qlp_testser".

Wie formuliere ich meinen Push-Befehl?

Ist es eine der folgenden:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
quelle

Antworten:

90

git push origin amd_qlp_testerwird für dich arbeiten. Wenn Sie nur eingeben git push, ist die Fernbedienung des aktuellen Zweigs der Standardwert.

Die Syntax von Push sieht so aus - git push <remote> <branch>. Wenn Sie sich Ihre Remote- .git/configDatei ansehen , sehen Sie einen Eintrag, [remote "origin"]der die URL des Repositorys angibt. Im ersten Teil des Befehls teilen Sie Git mit, wo sich das Repository für dieses Projekt befindet, und geben dann einfach einen Zweig an.

Petr Mensik
quelle
Vielen Dank dafür :), können Sie erklären, warum es sich um zwei separate "Wörter" handelt, wenn die Beschreibung des dit-Status sie als Pfad anzeigt, dh warum origin amd_qlp_testserund nichtorigin/amd_qlp_tester
code_fodder
Die Standardeinstellung "remote" basiert auf der Konfiguration des aktuellen Zweigs (in diesem Fall tatsächlich origin). Die Verzweigung (en), in die die Standardeinstellungen (in aktuellen Versionen von git) :verschoben werden sollen, wenn nicht festgelegt, was bedeutet matching, dass sich dies jedoch in Zukunft ändern soll.
Torek
Ich bin etwas verwirrt, ich verwende v2.10, wenn ich tippe, git pushwird versucht, alle verfolgten Zweige zu verschieben, entgegen Ihrer Aussage ("die Fernbedienung des aktuellen Zweigs ist der Standardwert").
Roberto
Git 2.x sollte eine simplePush-Strategie verwenden, was bedeutet, dass nur der aktuelle Zweig gepusht wird. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
109

Wenn Ihr lokaler Zweig und Ihr Remote-Zweig denselben Namen haben, können Sie dies einfach tun:

git push origin branchName

Wenn sich Ihr lokaler und der Remote-Zweigstellenname unterscheiden, können Sie dies einfach tun:

git push origin localBranchName:remoteBranchName
Imranmadbar
quelle
8

Bei den Antworten, auf die Sie verlinkt haben, geht es darum, git so zu konfigurieren, dass Sie sehr kurze git pushBefehle eingeben und sie tun lassen können, was Sie wollen. Was großartig ist, wenn Sie wissen, was Sie wollen und wie man das in Git-Ese buchstabiert, aber Sie sind neu in Git! :-)

In Ihrem Fall ist die Antwort von Petr Mensik die ( na ja , "a") richtige. Hier ist der Grund:

Der Befehl wurzelt in Ihrer Datei, um den Namen "remote" zu finden (z . B. ). Die Konfigurationsdatei listet auf:git push remote.git/configorigin

  • wo (URL-weise) diese Fernbedienung "lebt" (z. B. )ssh://hostname/path
  • Wohin geht es, wenn anders?
  • Was wird geschoben, wenn Sie nicht gesagt haben, welche Zweige geschoben werden sollen?
  • Was wird beim Laufen abgeholt? git fetch remote

Als Sie das Repo zum ersten Mal geklont haben - wann immer dies der Fall war - hat git für einige davon Standardwerte festgelegt. Die URL ist , was auch immer Sie geklont aus und der Rest, wenn sie gesetzt oder ungesetzt werden alle „vernünftigen“ defaults ... oder, hmm, sind sie?

Das Problem dabei ist, dass die Menschen im Laufe der Zeit ihre Meinung darüber geändert haben, was "vernünftig" ist. Daher kann Git jetzt (abhängig von Ihrer Version von git und davon, ob Sie die Dinge im Detail konfiguriert haben) viele Warnungen über zukünftige Standardeinstellungen drucken. Durch Hinzufügen des Namens des "zu drückenden Zweigs" - amd_qlp_tester- (1) wird dieser geschlossen, und (2) wird nur dieser eine Zweig gedrückt.

Wenn Sie bequemer pushen möchten, können Sie dies tun mit:

git push origin

oder auch:

git push

Ob dies jedoch das tut, was Sie wollen, hängt davon ab, ob Sie "frühen Git-Autoren" zustimmen, dass die ursprünglichen Standardeinstellungen angemessen sind, oder "späteren Git-Autoren", dass die ursprünglichen Standardeinstellungen nicht angemessen sind. Wenn Sie also (eventuell) alle Konfigurationsaufgaben erledigen möchten, lesen Sie die Frage (und Antworten), mit denen Sie verknüpft sind.

Was den Namen origin/amd_qlp_testeran erster Stelle betrifft: Das ist eigentlich eine lokale Entität (ein Name, der in Ihrem Repo aufbewahrt wird), obwohl er als "Remote-Zweig" bezeichnet wird. Es ist die beste Vermutung von git, "wo amd_qlp_testerist da drüben". Git aktualisiert es, wenn es kann .

torek
quelle
1
Danke für die Erklärung, ich denke ich habe es jetzt klar. Ich mag es präzise zu sein, also werde ich mich daran halten, git push origin amd_qlp_testerbis ich etwas Fortgeschritteneres tun muss :)
code_fodder
2

Ich möchte eine aktualisierte Antwort hinzufügen - jetzt benutze ich git für eine Weile und stelle fest, dass ich häufig die folgenden Befehle verwende, um Pushs durchzuführen (am Beispiel der ursprünglichen Frage):

  • git push origin amd_qlp_tester- Drücken Sie auf den Zweig in der Fernbedienung, der originauf dem angerufenen Fernzweig aufgerufen wird amd_qlp_tester.
  • git push -u origin amd_qlp_tester- Wie beim letzten, jedoch wird der Upstream festgelegt, der den lokalen Zweig mit dem Remote-Zweig verbindet, sodass Sie ihn beim nächsten Mal nur verwenden können, git push/pullwenn er noch nicht verbunden ist (dies muss nur einmal durchgeführt werden).
  • git push - Sobald Sie den Upstream eingestellt haben, können Sie einfach diese kürzere Version verwenden.

Hinweis -u Option ist die Kurzversion von --set-upstream- sie sind gleich.

code_fodder
quelle