Cuando se ejecuta git pullen la masterrama, generalmente se extrae origin/master. Estoy en una rama diferente llamada newbranch, pero necesito ejecutar un comando que hace un git pulldesde origin/masterdentro masterpero no puedo ejecutar git checkoutpara 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 newbranchy los he implementado cambiando el sitio web a newbranch. Ahora que esos cambios se han fusionado aguas arriba en la mastersucursal, también estoy tratando de cambiar el sitio web a la mastersucursal. En este punto, newbranchy origin/masterson idénticos, pero se masterestá quedando atrás origin/mastery 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

newbranchy no hay nada que esconder!git fetch; git merge origin/masterdesde 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/masterlo hará.fuente
git checkout master, pagará lamasterrama anterior porque no ha hecho unagit pullen lamaincarpeta para sincronizarla con origen / maestro. Esto es lo que estoy tratando de evitar.masternuevoorigin, pero no creo que tu pago final sea de esta actualizaciónmaster. No haygit pullque actualizar lamasterrama en elmaindirectorio, por lo tanto, a menos que me falte algo, sus comandos no son diferentes de simplemente ejecutarsegit checkout masterpor sí mismos y obtener elmasterárbol viejo . Si observa detenidamente, no está ejecutando ningún comando en elmaindirectorio 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 fetchpor 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
masterrama 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 fetchactualización de sus referencias remotas y luegogit checkout origin/mastermover 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;
checkoutNo es atómico.fuente
origin/masterembargo, es una buena idea hacer el check out , eso podría ser suficiente.git fetchantes 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 localmastera señalar la cabeza deoriginsmasterLa solución de Malvineous me funciona
Solo en dar el error
Entonces corro con la opción -D
Gracias
fuente
git fetch origin master:mastermaster.masterque aún no se han presionado,origin/masterse fusionan en su maestro.fuente