2012-10-21 17 views
26

Non ho mai utilizzato git prima del GitHub rilasciato l'app di Windows, quindi non l'ho mai usato in linea di comando.Come spingere più filiali da più commit?

Quindi, ecco la mia situazione:
Ho eseguito alcuni commit su master, quindi ho cambiato filiale e ho eseguito alcuni commit anche lì. Tutto senza spingere a GitHub. Quando ho fatto clic su sync nell'app di Windows (che presumo fa git push), con mia sorpresa, tutti i miei commit sono stati trasferiti al mio nuovo ramo, anche i commit effettuati mentre ero nello master.

Poiché questo è il comportamento dell'app di Windows, suppongo di dover utilizzare la riga di comando.
Qual è il comando corretto git push per inviare i commit ai rami corretti sul telecomando?

risposta

47

Per spingere tutti i rami (Rif sotto refs/teste), utilizzare il seguente comando (dove origine è il telecomando):

git push origin --all 

È inoltre possibile impostare push.default a matching nella vostra configurazione di spingere per impostazione predefinita tutti i rami hanno lo stesso nome su entrambe le estremità. Per esempio:

git config --global push.default matching 

Dal Git 2.0 il valore di default è simple che è l'opzione più sicura.

7

git push origin sposterà da tutti i rami di rilevamento fino al telecomando per impostazione predefinita.

git push origin my-new-branch invierà solo il nuovo ramo.

Non credo ci sia nulla di semplice o di possibile da fare accidentalmente che spingerebbe i commit da due rami diversi fino allo stesso ramo e fare l'unione sul telecomando.

Direi che il nuovo ramo ha il comando del master nella sua storia. Per vedere se è vero, esegui git log my-new-branch localmente e verifica se tali commit erano nella tua cronologia.

Se è così, quando si "rami Switched" probabilmente ramificata off del maestro dopo i nuovi commit sono state fatte, in modo che il nuovo ramo aveva tutti i commit nella storia, non solo quelli unici a quel ramo.

+1

Non sono sicuro del tuo ultimo suggerimento, direi che il comando è semplicemente 'git push origin branchOne anotherBranch' – Drealmer

+2

Penso che le versioni più recenti di git non spingano tutti i rami di monitoraggio: http://stackoverflow.com/ a/13148313/586086 –

4

In ritardo risposta, ma condividerò la mia soluzione che ha funzionato per me.

Infine il mio file /foo/.git/config assomiglia:

[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 

e di comando;

git push all --all 

Crediti: Pushing to Multiple Git Repositories Simultaneously

+0

Perché hai "url" due volte in "[remote" all "]'? – MiniGod

+0

Quello era un errore di battitura, modificato. Tnx! –

13

Se si vuole spingere diversi rami specifici (ad esempio Branch1 e Branch2) si può usare:

git push origin branch1 branch2 

In Git> = 2.4 Questa operazione può essere fatto atomicamente (cioè se non riesce a spingere nessuno dei rami specificati non verrà premuto nulla):

git push --atomic origin branch1 branch2 
+0

Non funziona. Spinge solo verso branch1 – Adnan

Problemi correlati