2011-08-26 20 views
172

Tengo una sucursal local de un proyecto ("configUpdate") que he bifurcado del proyecto de otra persona y he hecho una serie de cambios en él y me gustaría fusionar el cambios que han realizado en mi sucursal local.Cómo fusionar el maestro remoto a la sucursal local

He intentado

git pull --rebase origin configUpdate 

pero no ha agarrado los últimos cambios - Cómo puedo combinar los dos? (También para puntos de bonificación lo hice con el comando pull --rebase?)

+0

duplicado posible de [Git: Combinar una rama remota localmente] (https://stackoverflow.com/questions/21651185/git-merge-a-remote-branch-locally) –

Respuesta

61

me di cuenta que era:

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

Entonces, si no lo resolvió, su 'pull --rebase' no funcionó porque' origin' apuntaba a su fork. Hubiera funcionado si hicieras 'git pull --rebase upstream/master'. –

+0

Probar: git merge origen/maestro – Chris

264

¿Qué tal (asumiendo que usted está actualmente en la rama configUpdate):

git fetch 
git rebase origin/master 

En pocas palabras:

  • git merge branchname toma nuevos commits de la rama branchname, y los agrega a la rama actual. Si es necesario, agrega automáticamente una confirmación "Fusionar" en la parte superior.

  • git rebase branchname toma nuevas confirmaciones de la rama branchname, y las inserta "debajo" de los cambios. Más precisamente, modifica el historial de la rama actual de tal forma que se basa en la punta de branchname, con cualquier cambio que realice sobre eso.

  • git pull es básicamente lo mismo que git fetch; git merge origin/master.

  • git pull --rebase es básicamente lo mismo que git fetch; git rebase origin/master.

Así que por qué le gustaría utilizar en lugar de git pull --rebasegit pull? Aquí hay un ejemplo simple:

  • Comienza a trabajar en una nueva característica.

  • En el momento en que esté listo para impulsar sus cambios, otros desarrolladores han hecho varios commits.

  • Si git pull (que utiliza la combinación), los cambios serán ocultados por las nuevas confirmaciones, además de una confirmación de fusión creada automáticamente.

  • Si git pull --rebase lugar, Git va a avanzar rápidamente a su maestro a aguas arriba de, a continuación, aplicar los cambios en la parte superior.

+0

Hice esto en la rama correcta pero todavía puedo ver las diferencias entre mis archivos locales y la rama principal remota del proyecto original (¡aunque dice que todo está actualizado!) ¿Tal vez configuré el proyecto incorrectamente? ¿Alguna forma de verificar? – Martyn

+0

@Martyn: las diferencias deberían ser sus cambios locales. Haga otra bifurcación de la sucursal remota y verifique si tiene el contenido correcto del archivo. – ZeissS

+1

Sé que esta es una respuesta anterior, pero tenga en cuenta que es posible que prefiera hacer un MERGE en lugar de una rebase. No desea hacer una rebase si luego tendrá que fusionarse con un repositorio remoto que ya tiene algunos de sus cambios. –

27

Cambiar a su sucursal local

> git checkout configUpdate

combinación maestra remota a su rama

> git rebase master configUpdate

En caso de que tenga algún conflicto, corregirlos y para cada fichero en conflicto hacer el comando

> git add [vía_al_archivo/conflicted_file] (por ejemplo, git add app/activos/javascripts/Test.js)

Continuar rebase

> git rebase --continue

+0

no tengas miedo de usar rebase en lugar de fusionar dedica un tiempo a investigar la diferencia si sientes la brecha en estas preguntas –

+1

Muchas gracias. Este proceso funcionó para mí. – Fortisimo

9

git rebase no parecen funcionar para mí. Después de git rebase, cuando intento introducir cambios en mi sucursal local, sigo obteniendo un error ("sugerencia: las actualizaciones fueron rechazadas porque la punta de su rama actual está detrás de su contraparte remota. Integre los cambios remotos (por ejemplo, 'git pull'). .. ') antes de volver a presionar. ") incluso después de git pull. Lo que finalmente funcionó para mí fue la fusión git.

git checkout <local_branch> 
git merge <master> 

Si eres un principiante como yo, aquí hay un buen artículo sobre git merge vs git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

Cuestiones relacionadas