2013-03-29 7 views
10

Gibt es einen Weg in Git bare Repository, um einen Zweig, der nicht in HEAD gerade jetzt ist?git push NICHT aktuellen Zweig zu remote

Zum Beispiel habe ich zwei Zweige:

$ git branch 
* master 
    another 

Und ich habe zwei gesetzt Fernbedienungen: origin und another.

Ich muss in der Lage sein, von another zu another/another nur in einem Befehl zu drücken, ohne HEAD zu ändern.

+0

Sie sollten erwägen nicht für eine Fernbedienung und einen Zweig mit den exakt gleichen Namen. Es ist verwirrend. –

+3

Sie können 'git branch -m anderen another_branch' oder' git remote benennen Sie ein anderes another_remote' –

+2

@KlasMellbourn, das ist nur für den Zweck des Beispiels. Natürlich habe ich diese seltsame Benennung nicht. – AlexKey

Antwort

10

Mit git push können Sie die Fernbedienung angeben und die lokalen

git push another another 
+0

Bedeutet es, dass es lokale andere zu einem anderen/anderen drücken wird? Ich dachte immer, dass es "aktuellen HEAD" zu einem anderen/anderen schieben wird. – AlexKey

+3

Ja. (Die zweite) "andere" ist eine refspec, die (im Allgemeinen) die Form "src: dst" hat. Dies bedeutet, dass der lokale Zweig "src" auf den entfernten Zweig "dst" übertragen wird. Wenn ": dst" weggelassen wird, wird die lokale Verzweigung "src" an die entfernte Verzweigung "src" gesendet. –

+1

der aktuelle HEAD ist nur der Standard, aber Sie können jeden Zweig angeben (o allgemeiner irgendein refspec), wie Lars darauf hinwies –

23

Alle, die „eine andere eine andere“ in der ursprünglichen Frage, die Antwort und viele Kommentare sind so verwirrend (das ist ein perfektes Beispiel dafür ist es, warum ist wichtig, um Ihre Sachen in erster Linie zu benennen), ich kann nicht helfen helfen (Wortspiel nicht beabsichtigt), noch eine andere Antwort zu schreiben, wie unten.

F: Gibt es einen Weg in git (bare) Repository einen Zweig zu schieben, der nicht in HEAD jetzt ist? Zum Beispiel habe ich zwei Zweige und zwei Fernbedienungen. Ich muss in der Lage sein, von feature zu upstream/feature nur in einem Befehl zu drücken, ohne HEAD zu ändern.

$ git branch 
* master 
    feature 
$ git remote 
origin 
upstream 

A: Tun Sie dies.

$ git push upstream feature 

F: Bedeutet es, dass es lokale feature-upstream/feature vorantreiben wird? Ich dachte immer, es wird den aktuellen HEAD auf upstream/feature schieben.

A: Ja. Der feature Teil ist ein refspec, der im Allgemeinen die Form src:dst hat. Dies bedeutet, den lokalen Zweig src an den entfernten Zweig dst zu senden. Wenn :dst nicht angegeben wird, wird der lokale Zweig src an den Remote-Zweig src gesendet. Sie können auch einen anderen Namen als Remote-Zweig angeben. Just do:

$ git push upstream feature:cool_new_feature 

(Danke @ gabriele-Petron und @alexkey für Materialien für diese Antwort bereitstellt.)

+0

Beachten Sie, dass "Upstream" nur ein Alias ​​für eine bestimmte Fernbedienung ist. Quoten sind, wenn Sie die typischste Konvention online verfolgt haben (dh, Sie kopieren viel einfügen), wird es tatsächlich "Herkunft" sein. Siehe: https://stackoverflow.com/questions/9529497/what-is-origin-in-git – Kat

+0

@Kat: während sowohl "upstream" und "Herkunft" sind "nur" ein Alias ​​für eine bestimmte Fernbedienung, sie haben unterschiedliche Bedeutungen, nach Konvention von [github fork workflow] (https://help.github.com/articles/configuring-a-remote-for-a-fork/). Gehen Sie nicht davon aus, dass Sie "upstream" in jedem git-Befehl durch "origin" ersetzen können, es sei denn, Sie wissen, was Sie tun. – RayLuo