Los pasos que enumeró funcionarán, pero hay una forma más larga que le brinda más opciones:
git checkout dmgr2 # gets you "on branch dmgr2"
git fetch origin # gets you up to date with origin
git merge origin/master
El fetch
comando se puede hacer en cualquier momento antes del merge
, es decir, puede intercambiar el orden de la búsqueda y el pago, porque fetch
simplemente va al control remoto nombrado ( origin
) y le dice: "dame todo lo que tienes que no tengo ", es decir, todos los commits en todas las ramas. Se copian en su repositorio, pero reciben el nombre origin/branch
de cualquier rama nombrada branch
en el control remoto.
En este punto se puede utilizar cualquier espectador ( git log
, gitk
, etc.) para ver "lo que tienen" que no lo hace, y viceversa. A veces esto solo es útil para Warm Fuzzy Feelings ("ah, sí, eso es de hecho lo que quiero") y otras veces es útil para cambiar estrategias por completo ("whoa, todavía no quiero ESO").
Finalmente, el merge
comando toma el commit dado, que puede nombrar como origin/master
, y hace lo que sea necesario para incorporar ese commit y sus antepasados, a cualquier rama en la que se encuentre cuando ejecuta el merge
. Puede insertar --no-ff
o --ff-only
evitar un avance rápido, o fusionar solo si el resultado es un avance rápido, si lo desea.
Cuando usas la secuencia:
git checkout dmgr2
git pull origin master
el pull
comando indica a git que se ejecute git fetch
, y luego el equivalente moral de git merge origin/master
. Entonces, esto es casi lo mismo que hacer los dos pasos a mano, pero hay algunas diferencias sutiles que probablemente no le preocupan demasiado. (En particular, el fetch
paso ejecutado solopull
trae , y no actualiza la referencia en su repositorio: 1 cualquier nueva confirmación termina referida solo por la referencia especial ). origin/master
FETCH_HEAD
Si usa la secuencia más explícita git fetch origin
(luego, opcionalmente, mire a su alrededor) y luego git merge origin/master
, también puede actualizar su propio local master
con el control remoto, con solo una fetch
ejecución en la red:
git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
por ejemplo.
1 Esta segunda parte se ha cambiado, digo "arreglado", en git 1.8.4, que ahora actualiza las referencias de "rama remota" de manera oportunista. (Fue, como dicen las notas de la versión, una decisión de diseño deliberada para omitir la actualización, pero resulta que más personas prefieren que git lo actualice. Si desea que la antigua rama remota SHA-1, por defecto, se guarde en y, por lo tanto, recuperable del reflog. Esto también habilita una nueva característica git 1.9 / 2.0 para encontrar rebases ascendentes).