git fetch solo para la rama actual

3 minutos de lectura

avatar de usuario
Agudeza

Sé que puedo buscar cualquier sucursal remota en cualquier sucursal local, pero también hay algún tipo de atajo para buscar solo desde la sucursal remota rastreada a la sucursal local de seguimiento actual (sin la necesidad de especificar los nombres de las sucursales locales y remotas explícitamente) ?

Motivo: solo quiero obtener cambios remotos para la rama actual para evitar cambios (tal vez grandes) de ramas actualmente irrelevantes. Fusionaré/reorganizaré más adelante en un paso separado.

avatar de usuario
kalys.osmonov

Supongamos que tienes origen control remoto con Maestro, desarrollar sucursales. quieres sincronizar Maestro pero no desarrollar.

Puedes hacer los siguientes pasos:

git fetch origin
git merge origin/master

ACTUALIZACIÓN: en caso de que solo se tenga que buscar una sucursal:

git fetch origin master
git merge FETCH_HEAD

  • git fetch origin trae todo. yo solamente desea recuperar los cambios de la rama rastreada.

    – Motor

    5 de julio de 2012 a las 19:43

  • Debe agregar el valor para elegir la rama que desea del repositorio especificado, según el manual.

    – Felipe Oakley

    5 de julio de 2012 a las 22:27

  • Entonces prueba estas líneas: git fetch origin master git merge FETCH_HEAD

    – kalys.osmonov

    6 de julio de 2012 a las 2:53


  • quiero evitar usar origin y master y en su lugar utilizar algún tipo de marcadores de posición para el Actual sucursal, no importa si es master, release-3 o feature-xyz.

    – Motor

    6 de julio de 2012 a las 10:39

  • Si usa zsh, oh-my-zsh y su complemento git, puede usar ggpull. github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…

    – kalys.osmonov

    27 de septiembre de 2012 a las 10:54


git fetch $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | sed 's!/! !')

  • Buena respuesta, ¿alguien podría ayudarme a poner eso en un alias de git?

    – Mathieu Westphal

    7 sep 2017 a las 10:41

  • No pude encontrar cómo escapar de las cosas de sed, así que lo hice así: remandbranch = !sh -c ‘echo “$(git config branch.git name-rev --name-only HEAD.remote) $(git name-rev –name-only HEAD)”‘ fetchres = !sh -c ‘git fetch $(git remandbranch) && git reset –hard FETCH_HEAD’

    – Mathieu Westphal

    7 de septiembre de 2017 a las 11:09


avatar de usuario
ryan rodemoyer

Uniendo algunas cosas de las respuestas existentes…

Obtenga el nombre de la sucursal desprotegida:

git rev-parse --abbrev-ref HEAD

Para responder a su pregunta, ¿cómo obtiene solo la rama actual? Aquí tienes, como un alias llamado fetchthis. usar como git fetchthis.

git config --global alias.fetchthis '!bname=$(git rev-parse --abbrev-ref HEAD); git fetch origin $bname'

Probado en Git para Windows:

$ git --version
git version 2.25.1.windows.1

  • Para obtener el nombre de la sucursal registrada, puedo usar git branch y obtenga el nombre de la sucursal con un * junto a él, ¿correcto? no es lo mismo?

    – tarekahf

    25 de agosto a las 20:22

avatar de usuario
el hombre de la lana

Según https://stackoverflow.com/a/12142066/25192, puede usar esto para encontrar el nombre de la rama actual:


git rev-parse --abbrev-ref HEAD

… luego sustituya esto en el comando fetch como refspec.

Git es un descentralizado VCS. Cuando haces una búsqueda, estás sincronizando los dos repositorios por completo. Las ramas no son más que etiquetas adjuntas en confirmaciones específicas. Supongo que te refieres git fetch que no hace fusiones ni cosas por el estilo en ninguna rama en particular.

http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html

  • El hecho de que git esté descentralizado no tiene nada que ver con la pregunta que se hizo, y la sincronización con otro repositorio sí. no requieren que los sincronice por completo, incluidas todas las sucursales. Puede sincronizar cualquier referencia principal que desee, y solo esas referencias deberán transferirse.

    – Caleb

    5 de agosto de 2016 a las 12:01

  • El hecho de que git esté descentralizado no tiene nada que ver con la pregunta que se hizo, y la sincronización con otro repositorio sí. no requieren que los sincronice por completo, incluidas todas las sucursales. Puede sincronizar cualquier referencia principal que desee, y solo esas referencias deberán transferirse.

    – Caleb

    5 de agosto de 2016 a las 12:01

¿Ha sido útil esta solución?