Cuando se ejecuta git pull
en la master
rama, generalmente se extrae origin/master
. Estoy en una rama diferente llamada newbranch
, pero necesito ejecutar un comando que hace un git pull
desde origin/master
dentro master
pero no puedo ejecutar git checkout
para cambiar la rama seleccionada hasta después de que se complete la extracción. ¿Hay alguna forma de hacer esto?
Para dar algunos antecedentes, el repositorio almacena un sitio web. He realizado algunos cambios newbranch
y los he implementado cambiando el sitio web a newbranch
. Ahora que esos cambios se han fusionado aguas arriba en la master
sucursal, también estoy tratando de cambiar el sitio web a la master
sucursal. En este punto, newbranch
y origin/master
son idénticos, pero se master
está quedando atrás origin/master
y necesita ser actualizado. El problema es que si lo hago de la manera tradicional:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Necesito lograr lo mismo que arriba ( git checkout master && git pull
), pero sin cambiar el directorio de trabajo a una revisión anterior durante el proceso.
fuente
newbranch
y no hay nada que esconder!git fetch; git merge origin/master
desde dentronewbranch
. No hay ningún beneficio en clonar una segunda copia completa del repositorio.Respuestas:
Tienes un árbol de trabajo que no quieres tocar, así que usa otro. Clone es barato, está hecho para esto.
El problema con todas las otras respuestas aquí es que en realidad no lo hacen. Si necesita la fusión o el rebase para el que tiene configurado pull, necesita otro árbol de trabajo y el procedimiento anterior. De lo contrario solo
git fetch; git checkout -B master origin/master
lo hará.fuente
git checkout master
, pagará lamaster
rama anterior porque no ha hecho unagit pull
en lamain
carpeta para sincronizarla con origen / maestro. Esto es lo que estoy tratando de evitar.master
nuevoorigin
, pero no creo que tu pago final sea de esta actualizaciónmaster
. No haygit pull
que actualizar lamaster
rama en elmain
directorio, por lo tanto, a menos que me falte algo, sus comandos no son diferentes de simplemente ejecutarsegit checkout master
por sí mismos y obtener elmaster
árbol viejo . Si observa detenidamente, no está ejecutando ningún comando en elmain
directorio que se comunique en sentido ascendente (aparte de la línea 1, que se ejecuta antes de realizar cualquier cambio en el repositorio en sentido ascendente)Sencillo: Actualización desde una sucursal remota a una sucursal maestra actualmente no extraída :
donde origen es su control remoto y actualmente está desprotegido en alguna rama, por ejemplo, dev .
Si desea actualizar su rama actual además de la rama especificada de una vez:
fuente
Esto se responde aquí: combinar, actualizar y extraer ramas de Git sin usar las cajas
fuente
git fetch origin master:master
.git fetch
por sí mismo supondría que pretendía actualizar la rama actual y no alguna otra rama.Como resultado, la respuesta es engañosamente simple:
Esto le permite actualizar la
master
rama sin tener que cambiar a ella hasta después de que se ha actualizado.fuente
Te preocupa algo que no se puede arreglar, ya que las operaciones de Git no son atómicas. Siempre tendrá un agujero donde su directorio de trabajo esté a medio camino entre las ramas, incluso si actualiza el maestro sin cambiarlo primero. Es por eso que Git no es una herramienta de implementación .
Dado que en realidad no está confirmando el código en su entorno de producción (espero), en realidad no necesita tener una sucursal verificada. Simplemente puede hacer una
git fetch
actualización de sus referencias remotas y luegogit checkout origin/master
mover el directorio de trabajo directamente al commit al que apunta actualmenteorigin/master
. Esto lo pondrá en un estado de cabeza separada, pero nuevamente, como no está cometiendo código, esto no importa.Este es el agujero más pequeño que vas a conseguir, pero como dije, todavía existe un agujero;
checkout
No es atómico.fuente
origin/master
embargo, es una buena idea hacer el check out , eso podría ser suficiente.git fetch
antes de hacer cualquier otra cosa y elimine la transferencia real de datos.Puede usar update-ref para esto:
Tenga en cuenta que esto arrojaría cualquier confirmación local en la rama maestra. En su caso no habrá ninguno, así que está bien. Para otras personas que intentan hacer esto donde hay confirmaciones locales, no creo que sea posible, ya que la fusión solo se puede ejecutar en la rama actual.
fuente
git branch --force master origin/master
? Esto obliga a la cabeza localmaster
a señalar la cabeza deorigin
smaster
La solución de Malvineous me funciona
Solo en dar el error
Entonces corro con la opción -D
Gracias
fuente
git fetch origin master:master
master
.master
que aún no se han presionado,origin/master
se fusionan en su maestro.fuente