2013-08-14 22 views
10

Un modo:Qual è la differenza tra push branch e unire in master, quindi premere?

git checkout myBranch 
git push origin myBranch:master 

Un altro modo:

git checkout master 
git merge myBranch 
git push 

Qual è la differenza tra questi due?

+1

Una domanda più importante: *** cosa stai cercando di fare, e perché? *** –

+0

Voglio semplicemente unire le mie modifiche al master remoto. Ma non so se c'è il rischio che io possa scrivere più di qualche nuovo commit nel master remoto. – Magicloud

+0

Nel caso di 'git push origin myBranch: master', è solo avanti veloce, purché non aggiungiate un +' + 'al refspec come' + myBranch: master', che consente quindi aggiornamenti forzati. Allo stesso modo, 'git push' è solo l'aggiornamento veloce, non forzato, basta non passare il flag di forza' -f'. –

risposta

6

Questo:

git checkout myBranch 
git push origin myBranch:master 

tentativi solo fare un fast-forward (update cioè non forzata) premendo myBranch a master. Se master è raggiungibile da myBranch, ad esempio master non contiene alcun commit che non sia presente anche in myBranch, il push avrà esito positivo; in caso contrario, la spinta verrà respinta.

Il precedente git checkout myBranch è irrilevante per lo git push, poiché si utilizza la refspec myBranch:master. Puoi avere ulteriori informazioni su refspecs allo Git Internals - The Refspec.

Questo:

git checkout master 
git merge myBranch 
git push 

effettivamente fonde myBranch in master, e quindi tenta di spingerlo ad un telecomando (con una configurazione di default di un repo Git, il telecomando sarà origine).

Perché myBranch è in realtà fusi in master, quindi assumendo il telecomando master è dietro quella locale, cioè non contiene impegna i che quello locale non ha anche, quindi la spinta avrà successo, altrimenti fallirà .

+0

Ma si noti che 'git merge' potrebbe ancora risultare in un'unione avanti veloce. Quindi il risultato finale potrebbe o non potrebbe essere lo stesso, a seconda della relazione tra master, origine/master e myBranch – knittl

+0

@knittl Sono consapevole che 'git unire myBranch' potrebbe essere un avanzamento rapido. Non l'ho fatto presente, perché (1) dire che è un avanzamento rapido. Quindi 'git push myBranch: master' e' git push origin' sono gli stessi. Ma poi (2), diciamo che 'git unire myBranch' non è un avanzamento rapido. A questo punto, se l'utente fa 'git push origin myBranch: master', è lo stesso aggiornamento che risulterebbe da' git push origin ': sia l'avanzamento rapido del ramo remoto. Quindi è sempre lo stesso. –

+0

@Cupcake Quindi, in modo semplice, non importa in avanti o indietro, i miei due modi risultano uguali? – Magicloud

Problemi correlati