2011-08-26 11 views
172

Ho un ramo locale di un progetto ("configUpdate") che ho biforcato dal progetto di qualcun altro e ho apportato un carico di modifiche su di esso e vorrei unire il modifiche apportate alla mia filiale locale.Come unire il master remoto al ramo locale

Ho provato

git pull --rebase origin configUpdate 

ma non ha afferrato le ultime modifiche - come posso unire le due cose? (Anche per i punti bonus che cosa ho fatto con il comando pull --rebase?)

+0

Possibile duplicato di [Git: Unire un ramo remoto localmente] (https://stackoverflow.com/questions/21651185/git-merge-a-remote-branch-locally) –

risposta

61

ho scoperto che era:

$ git fetch upstream 
$ git merge upstream/master 
+6

Quindi, se non l'hai già capito, il tuo 'pull --rebase' non ha funzionato perché' origin' puntava alla tua forcella. Avrebbe funzionato se tu avessi 'git pull --rebase upstream/master'. –

+0

Prova: git merge origin/master – Chris

264

ne dite (supponendo che si sta attualmente sul ramo configUpdate):

git fetch 
git rebase origin/master 

In poche parole:

  • git merge branchname prende nuovi commit dal ramo branchname e li aggiunge al ramo corrente. Se necessario, aggiunge automaticamente un commit "Unisci" in cima.

  • git rebase branchname prende nuovi commit dal ramo branchname e li inserisce "sotto" le modifiche. Più precisamente, modifica la cronologia del ramo corrente in modo tale che sia basata sulla punta di branchname, con tutte le modifiche apportate in aggiunta.

  • git pull è fondamentalmente uguale a git fetch; git merge origin/master.

  • git pull --rebase è fondamentalmente uguale a git fetch; git rebase origin/master.

Quindi, perché si desidera utilizzare git pull --rebase piuttosto che git pull? Ecco un semplice esempio:

  • Si inizia a lavorare su una nuova funzione.

  • Nel momento in cui sei pronto a spingere le tue modifiche, diversi commit sono stati spinti da altri sviluppatori.

  • Se git pull (che utilizza merge), le modifiche saranno sepolti dai nuovi commit, oltre ad un unire automaticamente creato commit.

  • Se git pull --rebase invece, git sarà avanzare rapidamente il tuo padrone a monte di, poi applicare le modifiche sulla parte superiore.

+0

Ho fatto questo sul ramo corretta ma posso ancora vedere le differenze tra i miei file locali e il ramo master remoto del progetto originale (anche se dice che tutto è aggiornato!) forse ho impostato il progetto in modo errato? Qualche modo di controllare? – Martyn

+0

@Martyn: le differenze dovrebbero essere le tue modifiche locali. Crea un altro fork del ramo remoto e controlla se quello ha il contenuto del file corretto. – ZeissS

+1

So che questa è una vecchia risposta, ma nota che potresti preferire fare un MERGE invece di un rebase. Non vuoi fare un rebase se in seguito dovrai unirmi a un repository remoto che ha già alcune delle tue modifiche. –

27

Passa alla vostra filiale locale

> git checkout configUpdate

unione master remoto al ramo

> git rebase maestro configUpdate

Nel caso in cui si dispone di eventuali conflitti, correggerli e per ogni file in conflitto fare il comando

> git aggiungere [path_to_file/conflicted_file] (per esempio git add app/attività/javascripts/test.js)

Continua REBASE

> git rebase --continue

+0

non abbiate paura di usare rebase invece di unire dedicare un po 'di tempo a investigare la differenza se si sente il vuoto in queste domande –

+1

Grazie mille. Questo processo ha funzionato per me. – Fortisimo

9

git rebase non sembra funzionare per me. Dopo aver git rebase, quando provo a spingere le modifiche al mio ramo locale, ho continuato a ricevere un errore ("suggerimento: gli aggiornamenti sono stati respinti perché la punta del ramo attuale è dietro la sua controparte remota.Integrare le modifiche remote (ad esempio 'git pull. .. ') prima di premere nuovamente. ") anche dopo il lancio di git. Ciò che alla fine ha funzionato per me è stato unirsi.

git checkout <local_branch> 
git merge <master> 

Se sei un principiante come me, qui è un buon articolo su git merge vs git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

Problemi correlati