2012-01-05 20 views
45

Digamos que tengo una rama de tema privada llamada develop con 2 commits antes de master.¿Qué sucede cuando hago git pull master de origen en la rama de desarrollo?

¿Qué hace git pull origin master hacer?

¿Extraer todo del control remoto en el desarrollo local y fusionarlo? ¿Extraes todo en la rama principal local y lo fusionas?

¿Y hay alguna manera de actualizar master de develop sin git checkout master primero?

Respuesta

72

git pull origin master extrae la rama principal del origen remoto llamado en su rama actual. Solo afecta su rama actual, no su rama principal local.

él se puede dar la historia buscando algo como esto:

- x - x - x - x (develop) 
    \  /
    x - x - x (origin/master) 

Su rama principal local es irrelevante en este. git pull es esencialmente una combinación de git fetch y git merge; recupera la rama remota y luego la fusiona con su rama actual. Es una fusión como cualquier otra; no hace nada mágico.

Si desea actualizar su rama principal local, no tiene más remedio que verificarla. Es imposible fusionarse en una rama que no está desprotegida, porque Git necesita un árbol de trabajo para realizar la fusión. (En particular, es absolutamente necesario para informar conflictos de fusión y permitirle resolverlos.)

Si sabe que acceder al maestro sería un avance rápido (es decir, no tiene compromisos en su maestro local) rama que no están en el maestro de origen) puede trabajar, as described in this answer.

+1

Puede ingresar en una sucursal local no pagada si puede reenviarse rápidamente. Pero eso es todo un truco;) – knittl

+0

@knittl: ¡Es cierto! Empujar es elegante ya que verifica si es rápido para usted. Me gusta la solución 'update-ref' porque puedes dejar la traza correcta en los reflogs, y soy obsesivo de esa manera. – mrj

+0

@ e-satis: Animar a los nuevos usuarios a votar sobre las preguntas es genial ... pero vale la pena responder y vale la pena un voto positivo no es necesariamente lo mismo. (Aunque tu pregunta es ambas). – Cascabel

3

Una vez que usted se compromete que los cambios en su rama utilizando

git add -A 
git commit -m <message> 

A continuación, puede hacer:

git pull origin master 

en su rama y que mantendrá sus confirmaciones en la parte superior de la atracción principal. Tu rama estará ahora incluso con master + tus commits en la parte superior. Entonces, ahora puede hacer:

git push 

y git presionarán sus cambios, junto con los commits maestros en su rama. Entonces, puedes fusionar fácilmente eso en master en Github.

+0

este fue un buen complemento si se lee después de la respuesta de @mrj. En su mayoría estamos en un flujo de trabajo similar al tirar – kushalvm

Cuestiones relacionadas