¿Hay alguna forma de configuración para configurar esto sin tener que especificar qué rama?
Respuestas:
Git ya solo extrae la rama actual. Si ha configurado una rama como una rama de seguimiento, no es necesario que especifique la rama remota. git branch --set-upstream localbranch reponame/remotebranch
establecerá la relación de seguimiento. Luego emite git pull [--rebase]
y solo se actualizará esa rama.
Por supuesto, se actualizarán todas las sucursales de seguimiento remoto y todas las referencias del control remoto, pero solo se modificará su sucursal de seguimiento local.
Útil alias de Bash para reducir la escritura de esta operación común:
# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'
Función Powershell que hace lo mismo:
Function pullhead {
$cur_head="$(git rev-parse --abbrev-ref HEAD)"
& git pull origin ${cur_head}
}
Solo lo hice de esta manera:
git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"
o
git pull origin $(git rev-parse --abbrev-ref HEAD)
Esto extrae la rama actual git branch
y extrae esa rama del origen remoto.
Tenga en cuenta que, como dijo Seth Robertson, cuando no se dan argumentos, solo se modifica la rama actual, pero se obtienen todas las ramas remotas. No quiero buscar todas las ramas remotas, así que lo hice de esta manera.
git branch
en realidad, no debería analizarse para obtener información de sucursales. Esa información está disponible al git rev-parse
hacer el comando:git pull origin $(git rev-parse --abbrev-ref HEAD)
git pull origin <current-branch>
cuál es el predeterminado de todos modos, ¿no es así? ¿Está insinuando que las otras ramas remotas (por ejemplo, origen / otra rama, etc.) no se actualizan, por lo que se reduce el tráfico?
git pull
, podría terminar con un mensaje como There is no tracking information for the current branch. Please specify which branch you want to merge with.
. Entonces siempre terminas escribiendo git pull origin my-feature-branch
. Realmente me gustaría saber cómo llega esta situación de que no hay información de seguimiento.
ACTUALIZAR
La respuesta anterior que agregué ya no funciona: /. Pero después de recibir algunos votos positivos sobre la versión PUSH que coloqué, para mí significa que esta respuesta en realidad está ayudando a alguien que termina viniendo aquí desde los motores de búsqueda, así que guardaré esta respuesta.
Prueba esto para la nueva versión de git:
$ git config --global push.default current
pull.default=current
. Veo que mi git clone
también se agregó por defecto, remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
pero eso es bastante estándar.
pull.default
variable de configuración. Poner eso en tu configuración de git no hará nada.
Sí, hay una configuración que se puede cambiar .gitconfig
, por ejemplo:
[push]
default = current
lo que empujaría a la rama actual para actualizar una rama con el mismo nombre en el extremo receptor.
Corregido por:
git config --global --get push.default
Ver: git-config .
La --set-upstream
bandera está obsoleta y se eliminará. Por lo tanto, use --track
o--set-upstream-to
Ejemplo: si desea configurar la información de seguimiento para esta rama, puede hacerlo con:
git branch --set-upstream-to=<remote>/<branch> develop
--set-upstream-to=
git lo sigue mencionando cuando no conoce tu información de seguimiento. Sin mención de desaprobación.
Aquí hay un alias de git que no asume que el control remoto es origin
y maneja si la rama no está rastreando un control remoto.
pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"
(Descargo de responsabilidad: soy un novato en bash y lo anterior probablemente podría simplificarse mucho).