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 fetch
Debes hacer lo que quieras.git fetch
actualizarí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
pull
tiene parámetros que elfetch
no:-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:master
Tuve el mismo problema con la necesidad de comprometer o esconder los cambios actuales de las funciones, pagar la rama maestra , hacer el
pull
comando, obtener todo, desde elmaster
espacio de trabajo remoto al local , luego cambiar de nuevo a una rama de la función y realizar unarebase
actualizació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:master
git rebase master
Y hace el truco muy bien.
fuente
feature
y TODO lo que quiere hacer es actualizar su localmaster
para 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/master
Si 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 hostdevhost
y estás en un repositorio dondeorigin
está 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
devhost
realidad 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 -p
por 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
pull
realiza una búsqueda (que, sí, recupera todo desde el control remoto) pero luego combina solo la rama actual .