Come unire il master remoto alla filiale locale


238

Ho un ramo locale di un progetto ("configUpdate") che ho biforcuto dal progetto di qualcun altro e ho fatto un sacco di modifiche su di esso e vorrei unire le modifiche che hanno apportato alla mia filiale locale.

ho provato

git pull --rebase origin configUpdate

ma non ha afferrato le ultime modifiche: come posso unire le due? (anche per i punti bonus cosa ho fatto con il pull --rebasecomando?)


Risposte:


354

Dal tuo ramo di funzioni (ad es. configUpdate) Esegui:

git fetch
git rebase origin/master

O la forma più breve:

git pull --rebase

Perché questo funziona:

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

  • git rebase branchnameprende nuovi commit dalla filiale branchnamee li inserisce "sotto" le tue modifiche. Più precisamente, modifica la cronologia del ramo corrente in modo tale che si basi sulla punta di branchname, con eventuali modifiche apportate a questo.

  • git pullè sostanzialmente lo stesso di git fetch; git merge origin/master.

  • git pull --rebaseè sostanzialmente lo stesso di git fetch; git rebase origin/master.

Quindi perché dovresti usare git pull --rebasepiuttosto che git pull? Ecco un semplice esempio:

  • Inizi a lavorare su una nuova funzionalità.

  • Quando sei pronto a inviare le tue modifiche, diversi sviluppatori sono stati spinti da altri sviluppatori.

  • Se tu git pull(che usa l'unione), le tue modifiche verranno seppellite dai nuovi commit, oltre a un commit di unione creato automaticamente.

  • Se git pull --rebaseinvece, git farà avanzare velocemente il tuo master verso l'alto, quindi applicherà le tue modifiche in cima.


L'ho fatto sul ramo corretto ma riesco ancora a vedere le differenze tra i miei file locali e il ramo principale remoto del progetto originale (anche se dice che tutto è aggiornato!) Forse ho impostato il progetto in modo errato? Qualche modo per controllare?
Martyn,

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

4
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 unirti a un repository remoto che ha già alcune delle tue modifiche.
Domino

1
Che ne dici (supponendo che tu sia attualmente in branch configUpdate) ... git pull è praticamente lo stesso di git fetch; git unisci origine / master. <- NOT TRUE
Chris,

@ Chris: in che senso non è vero? L'assunto di origine / padrone come monte? O è stato cambiato git pull?
Joey Adams

81

Ho scoperto che era:

$ git fetch upstream
$ git merge upstream/master

6
Quindi, se non l'hai già capito, pull --rebasenon hai funzionato perché originindicava la tua forcella. Avrebbe funzionato se lo avessi fatto git pull --rebase upstream/master.
Karl Bielefeldt,

3
Prova: git merge origin / master
Chris,

Mi mancava un recupero, questa risposta me l'ha risolto.
Nurettin,

39

Passa alla tua filiale locale

> git checkout configUpdate

Unisci master remoto al tuo ramo

> git rebase master configUpdate

In caso di conflitti, correggerli e per ogni file in conflitto eseguire il comando

> git add [path_to_file / conflted_file] (ad es. git add app / assets / javascripts / test.js)

Continua rebase

> git rebase --continua


non aver paura di usare rebase invece di unire dedica un po 'di tempo a investigare la differenza se senti il ​​divario in queste domande
Serge Seletskyy,

13

git rebase non sembra funzionare per me. Dopo git rebase, quando provo a inviare le modifiche al mio ramo locale, continuo a ricevere un errore ("suggerimento: gli aggiornamenti sono stati rifiutati perché la punta del ramo corrente è dietro la sua controparte remota. Integra le modifiche remote (ad esempio 'git pull. .. ') prima di premere di nuovo. ") anche dopo aver premuto git. Ciò che alla fine ha funzionato per me è stato Git Merge.

git checkout <local_branch>
git merge <master> 

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.