2012-10-21 10 views
26

Ich habe nie git verwendet, bevor GitHub die Windows-App freigegeben, also habe ich es nie in der Befehlszeile verwendet.Wie pushen Sie mehrere Zweige aus mehreren Commits?

Also hier ist meine Situation:
Ich habe einige Commits auf master, dann wechselte Zweig und hat einige Commits auch dort. Alles ohne auf GitHub zu drücken. Als ich klickte dann sync in der die Windows-Anwendung (was ich davon ausgehen, tut git push), zu meiner Überraschung, alle meine Commits zu meinem neuen Zweig geschoben wurden - auch die Commits ich gemacht, während ich in master war.

Da es sich um das Verhalten der Windows-Anwendung, ich denke, ich habe die Befehlszeile verwenden.
Was ist der korrekte git push Befehl, um die Commits zu den richtigen Zweigen auf der Fernbedienung zu schieben?

Antwort

47

schieben alle Zweige (Lit. unter refs/heads), verwenden Sie den folgenden Befehl ein (wo Ursprung der Fernbedienung ist):

git push origin --all 

Sie auch push.default zu matching in der Config einstellen zu schieben Alle Zweige haben standardmäßig den gleichen Namen an beiden Enden. Zum Beispiel:

git config --global push.default matching 

Da Git 2.0 ist die Standardeinstellung simple welche die die sicherste Option.

7

git push origin drückt aus allen Tracking-Zweige bis zu den entfernten standardmäßig.

git push origin my-new-branch wird nur Ihre Niederlassung schieben.

Ich glaube nicht, es etwas einfach oder möglich ist, versehentlich zu tun, würde Commits aus zwei verschiedenen Zweigen bis zu der gleichen Branche schieben und tun, um die Zusammenführung auf der Fernbedienung.

Ich würde vermuten, dass die neue Niederlassung die Festschreibungen von Meister hatte in seiner Geschichte. Um zu sehen, ob das wahr ist, führen Sie git log my-new-branch lokal aus und sehen Sie, ob diese Commits in Ihrem Verlauf waren.

Wenn ja, wann Sie „Zweige eingeschaltet“ werden Sie wahrscheinlich aus dem Master-verzweigten nach die neuen Commits gemacht wurden, so dass die neue Niederlassung alle Commits in der Geschichte hatte, nicht nur die, die einzigartig für diesen Zweig.

+1

Ich bin mir nicht sicher über Ihren letzten Vorschlag, würde ich sagen, der Befehl ist einfach 'git push Herkunft BranchOne anderenBranch' – Drealmer

+2

Ich denke, dass neuere Versionen von Git nicht alle Tracking-Filialen schieben: http://StackOverflow.com/ a/13148313/586086 –

4

Späte Antwort, aber ich werde meine Lösung teilen, die für mich arbeitete.

Schließlich meine /foo/.git/config Datei wie folgt aussieht:

[core] 
    ... 

[remote "dev"] 
    url = http://dev.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/dev/* 
[remote "pro"] 
    url = http://pro.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/pro/* 

[remote "all"] 
    url = http://dev.foobar.com/foo.git 
    url = http://pro.foobar.com/foo.git 

[http] 
    postBuffer = 524288000 

und gebietet;

git push all --all 

Credits: Pushing to Multiple Git Repositories Simultaneously

+0

Warum hast du 'url' zweimal unter' [remote "all"] '? – MiniGod

+0

Das war ein Tippfehler, bearbeitet. Tnx! –

13

Wenn Sie (zB branch1 und branch2) mehrere spezifische Zweige schieben möchten Sie verwenden können:

git push origin branch1 branch2 

In Git> = 2.4 Dieser Vorgang kann atomar durchgeführt werden (dh wenn es nicht möglich ist, einen der angegebenen Zweige zu drücken, wird nichts gedrückt):

git push --atomic origin branch1 branch2 
+0

Es funktioniert nicht. Es drängt sich nur zu branch1 – Adnan

Verwandte Themen