2013-03-01 18 views
6

Ho una filiale devel e origine/master è stata aggiornata. Corro git pull e posso vedere le modifiche remote. Tuttavia, il mio master locale è ancora dove l'ho lasciato quando ho fatto in precedenza git checkout devel. Voglio unire le modifiche origine/master al mio ramo devel; tale ramo esiste anche sul telecomando.Aggiornamento del master locale al master remoto da un altro ramo

Preferirei non eseguire il checkout del ramo master poiché finirò per ricostruire un sistema enorme. Posso spostare il mio locale master sull'origine / da un altro ramo? Quindi posso fare un merge da devel. O è più facile solo per merge l'origine /master a devel direttamente? Sembra che ci saranno problemi in seguito?

Modifica: un altro modo per evitare questo problema è utilizzare diversi spazi di lavoro con lo stesso repository.
See: git new workdir - Si può avere sia maestro e devel controllato allo stesso tempo, ma utilizzando lo stesso .git repository.

risposta

8

L'unica differenza tra l'aggiornamento del locale master-origin/master e poi la fusione, contro appena la fusione origin/master direttamente, è la pre-generata messaggio di commit sulla fusione (o meglio, a patto che alla fine di aggiornare master). Quindi dico solo unire in origin/master.


Detto questo, per rispondere alla domanda "come posso aggiornare un ramo non-controllato-out locale per abbinare il suo ramo tracking", si può dire

git push . origin/master:master 

Questo utilizza il macchinario git push, ma un repository di . significa "il repository corrente". Il ramo sorgente è specificato come origin/master e il ramo remoto come master, quindi questo aggiornamento master corrisponde a origin/master. Potresti fare la stessa cosa con il comando idraulico git update-ref, ma usare git push è più semplice e un po 'più sicuro (perché impedirà le unioni non ad avanzamento rapido per impostazione predefinita, e credo che impedirà anche di spingere verso il tuo ramo ritirato) .

+4

Ehi, questo è un bel trucco con la spinta locale, bello, grazie! – poke

2

Per impostazione predefinita, git pull preleverà dal ramo remoto e si fonderà nel ramo corrente. Se non si specifica una diramazione nel comando git pull, Git utilizzerà quello specificato per il proprio ramo, in genere il ramo di monitoraggio remoto.

Così esecuzione git pull nel ramo devel sarebbe prendere il devel ramo dal telecomando e unire le modifiche da lì, ma non da padrone.

Nota che l'esecuzione di git fetch aggiornerà tutti i rami remoti per il telecomando. Quindi origin/master verrà aggiornato dopo il recupero, consentendoti di unirlo nel ramo attuale usando solo git merge origin/master.

Ovviamente questo non aggiornerà il locale maestro però, così si potrebbe desiderare di aggiornare che poi troppo, prima di fondersi tua devel ramo in esso.

Problemi correlati