Estoy acostumbrado a ejecutar git pull y otros comandos desde una rama en la que estoy trabajando. Pero he configurado un servidor de desarrollo en el que trabajan varias personas, por lo que no quiero tener que cambiar de sucursal cuando lo hago. Si quiero actualizar una rama existente en el servidor de desarrollo desde el repositorio de github que todos usamos, ¿cuál sería la forma correcta de hacerlo? Si ejecuto el comando 'git pull github branchname', ¿eso simplemente arrastrará la rama a la rama actual?
Todos los ejemplos de git que puedo encontrar parecen indicar que ejecutas 'checkout branchname' primero, luego haces el pull. Estoy tratando de evitar eso. Como dije, esta es una rama existente y solo quiero actualizar a la última versión.

git fetchDebes hacer lo que quieras.git fetchactualizaría la copia local de la rama remota, pero no cualquier rama local, incluso si una está configurada para rastrear esa rama remota específica. Puede o no ser lo que se quiere. (. Editar: por defecto, de todos modos Es posible llamar con argumentos para hacer que se comporte de manera diferente, pero en ese caso, los argumentos realmente deben señalarse.)Respuestas:
Estaba buscando lo mismo y finalmente encontré la respuesta que me funcionó en otra publicación de stackoverflow: fusionar, actualizar y extraer ramas de Git sin usar las cajas
Básicamente:
git fetch <remote> <srcBranch>:<destBranch>fuente
pulltiene parámetros que elfetchno:-s <strategy>,-Xsubtree=...lo cual fue un vital para mí, así que esto no es un reemplazo equivalente. Tuve el problema descrito aquí: congruityservice.com/blog/… pero en el caso mío no quería un pago en absoluto.git pull <remote> <srcBranch>:<destBranch>.git fetch . origin/master:masterTuve el mismo problema con la necesidad de comprometer o esconder los cambios actuales de las funciones, pagar la rama maestra , hacer el
pullcomando, obtener todo, desde elmasterespacio de trabajo remoto al local , luego cambiar de nuevo a una rama de la función y realizar unarebaseactualización para actualizar Maestro.Para hacer todo esto, mantenga el espacio de trabajo en la rama de características y evite todos los cambios, hago esto:
git fetch origin master:mastergit rebase masterY hace el truco muy bien.
fuente
featurey TODO lo que quiere hacer es actualizar su localmasterpara que esté en línea con el origen, SIN tocarfeature, simplemente hagagit fetch origin master:master... y es como si lo hiciera stash-checkoutMaster-pull-checkoutFeature-stashPop!git merge origin/masterSi desea que las sugerencias de sucursales locales se vuelvan a señalar después
git fetch, necesita algunos pasos adicionales.Más concretamente, supongamos que el repositorio GitHub tiene ramas
D,B,C, ymaster(la razón de este nombre-sucursal-conjunto impar serán claras en un momento). Estás en el hostdevhosty estás en un repositorio dondeoriginestá el repositorio de Github. Que hacesgit fetch, lo que aporta más de todos los objetos y actualizacionesorigin/D,origin/B,origin/C, yorigin/master. Hasta aquí todo bien. Pero ahora usted dice que quiere que pase algo, sobredevhost, a locales ramasD,B,C, y / omaster?Tengo estas preguntas obvias (para mí de todos modos):
B) tiene compromisos que le faltan al repositorio remoto (github)? ¿Deberían fusionarse, rebasearse o ...?C) y el directorio de trabajo y / o el índice se modifican pero no se confirman?A) y / o ramas eliminadas (D)?Si la respuesta a (1) es "porque en
devhostrealidad no es para el desarrollo, sino que es un espejo local que simplemente mantiene una copia disponible localmente del repositorio de Github para que todos nuestros desarrolladores reales puedan leerlo rápidamente en lugar de leerlo lentamente github ", entonces quieres un" espejo "en lugar de un repositorio" normal ". No debería tener un directorio de trabajo, y quizás tampoco debería aceptar inserciones, en cuyo caso las preguntas restantes simplemente desaparecen.Si hay alguna otra respuesta, (2-4) se vuelve problemática.
En cualquier caso, aquí hay una manera de abordar la actualización de referencias locales basadas en referencias remotas (después de ejecutar,
git fetch -ppor ejemplo):Lo que se incluye en la
... code here ...sección depende de las respuestas a las preguntas (2-4).fuente
Utilizar
en lugar. Actualiza las referencias remotas y los objetos en su repositorio, pero deja solo las ramas locales, HEAD y el árbol de trabajo.
fuente
EDITAR: Use 'git pull' Recuperará todas las ramas del repositorio y también se actualizará a la última si la rama sale del sistema local solo para la rama actual. Nota: git pull es equivalente a fetch + merge que busca todas las ramas pero combina solo la rama actual.
fuente
pullrealiza una búsqueda (que, sí, recupera todo desde el control remoto) pero luego combina solo la rama actual .