diana saunders
estoy acostumbrado a correr git pull
y otros comandos desde dentro de 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 haga.
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 empujará la rama hacia la rama actual?
Todos los ejemplos de git que puedo encontrar parecen indicar que ejecutas checkout branchname
primero, luego haz el tirón. Estoy tratando de evitar eso. Como dije, esta es una rama existente y solo quiero actualizar a la última versión.
coral
Estaba buscando lo mismo y finalmente encontré la respuesta que funcionó para mí en otra publicación de stackoverflow: fusionar, actualizar y extraer ramas de Git sin usar pagos
Básicamente:
git fetch <remote> <srcBranch>:<destBranch>
Ejemplo:
git fetch origin branchname:branchname
-
¿Hay alguna manera de usar la rama ascendente en lugar de especificar la rama de origen?
– cambuntuoso
22 de noviembre de 2019 a las 14:52
-
Tristemente, pero el
pull
tiene parámetros que elfetch
no es:-s <strategy>
,-Xsubtree=...
que era vital para mí, por lo que este no es un reemplazo equivalente. Tuve el problema descrito aquí: congruityservice.com/blog/… pero en el caso mío no quería pagar en absoluto.– andry
8 dic 2019 a las 19:46
-
Teniendo en cuenta que la pregunta es sobre la atracción, parece que la respuesta debería ser
git pull <remote> <srcBranch>:<destBranch>
.– marmota
12 dic 2019 a las 20:46
-
Si las confirmaciones ya están en tu repositorio local:
git fetch . origin/master:master
– Evan
24 de abril de 2020 a las 15:32
-
Si todo lo que desea es fusionar la sucursal (origen | en línea) en su sucursal local, puede usar
git merge origin/master
– Abdul Rehman
11 oct 2021 a las 6:36
Tuve el mismo problema con la necesidad de confirmar o ocultar los cambios de funciones actuales, pagar maestro rama, hacer pull
el comando obtiene todo, desde remoto a local master
área de trabajo, luego cambie nuevamente a una rama de función y realice una rebase
para ponerlo al día con el maestro.
Para hacer todo esto, mantenga el espacio de trabajo en la rama de funciones y evite todos los cambios, hago esto:
git fetch origin master:master
git rebase master
Y hace el truco muy bien.
-
Este es un buen consejo pero entierra el lede: según las respuestas a continuación, si está en
feature
y TODO lo que quiere hacer es actualizar su localmaster
estar en línea con el origen, SIN tocarfeature
solo hazgit fetch origin master:master
… y es como si hicieras stash-checkoutMaster-pull-checkoutFeature-stashPop!– ciudad b
26 de julio de 2019 a las 16:25
-
Para fusionar el maestro de origen en su sucursal local, no necesita extraer el maestro local. Puedes usar
git merge origin/master
– Dan
16 de agosto de 2019 a las 11:32
-
Un pull es solo una búsqueda seguida de una fusión/reorganización, por lo que debería poder hacer lo mismo en 1 línea:
git pull origin main:main --rebase
– jor
15 de enero de 2021 a las 6:39
Usé el siguiente comando para actualizar la rama de origen a la rama local sin pagar. git buscar origen [BranchName]:[BranchName]
si quieres el local consejos de rama para volver a apuntar después git fetch
necesita algunos pasos adicionales.
Más concretamente, supongamos que el repositorio de github tiene sucursales D
, B
, C
y master
(La razón de este extraño conjunto de nombres de rama se aclarará en un momento). estás en el anfitrión devhost
y estás en un repositorio donde origin
es el repositorio de github. Tú haces git fetch
que trae todos los objetos y actualizaciones origin/D
, origin/B
, origin/C
y origin/master
. Hasta ahora, todo bien. Pero ahora dices que quieres que pase algo, en devhost
a local sucursales D
, B
, C
y/o master
?
Tengo estas preguntas obvias (para mí de todos modos):
- Por qué quieres los consejos de todo sucursales actualizadas?
- ¿Qué pasa si alguna rama (por ejemplo,
B
) tiene confirmaciones de las que carece el repositorio remoto (github)? ¿Deberían fusionarse, reorganizarse o…? - ¿Qué pasa si estás en alguna rama (p. ej.,
C
) y el directorio de trabajo y/o el índice se modifican pero no se confirman? - ¿Qué pasa si el repositorio remoto tiene nuevas sucursales agregadas (
A
) y/o sucursales eliminadas (D
)?
Si la respuesta a (1) es “porque devhost
no es en realidad 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 leer lentamente desde github”, entonces desea un “espejo” en lugar de un repositorio “normal”. No debería tener un directorio de trabajo, y quizás tampoco debería aceptar empujes, en cuyo caso las preguntas restantes simplemente desaparecen.
Si hay alguna otra respuesta, (2-4) se vuelven problemáticas.
En cualquier caso, aquí hay una forma de abordar la actualización de referencias locales basadas en referencias remotas (después de ejecutar git fetch -p
por ejemplo):
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
que va en el ... code here ...
sección depende de las respuestas a las preguntas (2-4).
Usar
git fetch
en cambio. Actualiza las referencias remotas y los objetos en su repositorio, pero deja las ramas locales, HEAD y el árbol de trabajo solos.
-
Pero eso no actualiza las sucursales locales de su servidor de desarrollo… solo actualiza las sucursales de “origen” en esa carpeta de git, que corresponden al repositorio de github del autor de la pregunta.
– ANeves
3 oct 2017 a las 10:52
-
O, si quieres mi versión del problema: quiero fusionar mi rama de trabajo con “maestro”, y no con “origen/maestro de ssh://bla bla bla”. Hacer fetch actualizará origin/master, pero no master.
– ANeves
3 oct 2017 a las 10:53
-
Pero eso no actualiza las sucursales locales de su servidor de desarrollo… solo actualiza las sucursales de “origen” en esa carpeta de git, que corresponden al repositorio de github del autor de la pregunta.
– ANeves
3 oct 2017 a las 10:52
-
O, si quieres mi versión del problema: quiero fusionar mi rama de trabajo con “maestro”, y no con “origen/maestro de ssh://bla bla bla”. Hacer fetch actualizará origin/master, pero no master.
– ANeves
3 oct 2017 a las 10:53
git fetch
deberías hacer lo que quieras.– brad
17/09/2013 a las 18:47
git fetch
actualizaría la copia local de la sucursal remota, pero no cualquier sucursal local, incluso si una está configurada para rastrear esa sucursal remota específica. Puede o no ser lo que se busca. (Editar: de forma predeterminada, de todos modos. Es posible llamarlo con argumentos para que se comporte de manera diferente, pero en ese caso, los argumentos realmente deberían señalarse).– usuario743382
17/09/2013 a las 18:50
No entiendo muy bien… ¿todos usan el mismo repositorio local en el servidor de desarrollo? ¿Es por eso que no quieres cambiar de sucursal? ¿Por qué no hacer que todos hagan su propio clon privado en el que puedan trabajar? Ver también git: ¿actualizar una sucursal local sin revisarla?.
– usuario456814
18 de septiembre de 2013 a las 3:03
Posible duplicado de fusionar, actualizar y extraer ramas de Git sin usar pagos
– Michael Mrozek
15 de abril de 2019 a las 15:20