2011-05-18 9 views

Respuesta

55

Git ya solo tira de la rama actual. Si tiene una bifurcación configurada como una bifurcación de seguimiento, no necesita especificar la bifurcación remota. git branch --set-upstream localbranch reponame/remotebranch configurará la relación de seguimiento. A continuación, emita git pull [--rebase] y solo se actualizará esa rama.

Por supuesto, todas las ramas de seguimiento remoto y todas las referencias para el control remoto se actualizarán, pero solo se modificará la rama de seguimiento local.

+0

bien, y tal vez un poco extraño porque "git push" (por defecto) intenta empujar todas las ramas (con el mismo nombre remoto). –

+2

@AlessandroDs Bueno, configuré push.default en la corriente ascendente por esa misma razón. El nuevo valor predeterminado para push.default es "simple", que nuevamente solo actualiza la rama actual, por lo que es mucho más paralela a lo que hace pull. –

+0

@SethRobertson: Gracias por la respuesta, ¿pueden dar más detalles sobre esta última parte? ¿Por modificado, quiere decir que los cambios no se obtienen del repositorio remoto? Estamos descubriendo que con varias ramas a ~ 100MB cada una, cuando hacemos un pull obtenemos varias descargas ~ 100MB ocurriendo (básicamente, todas las ramas). – danjah

28

que acabo de hacer 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 de git branch, y tira de esa rama de 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 sucursales remotas, así que lo hice de esta manera.

+0

poco complicado ... pero funciona. +1 – shashwat

+1

'git branch' en realidad no se debe analizar para obtener información de la sucursal. Esa información está disponible con 'git rev-parse' haciendo el comando:' git pull origen $ (git rev-parse --abbrev-ref HEAD) ' –

+0

@ayke He añadido la respuesta de Paul DelRe a la tuya, ya que también funcionó, espero a los dos no les importa –

16

probar esto por la nueva versión de Git:

$ git config --global push.default current 
+6

No creo que pull.default exista. Consulte [git-scm] (http://git-scm.com/docs/git-config.html) o [kernel.org] (https://www.kernel.org/pub/software/scm /git/docs/git-config.html). – Mort

+0

@Mort ¿Has probado todavía? Funcionó para mí: D –

+2

Sí. git 2.3.4 en Linux recupera todas las ramas incluso con el anterior 'pull.default = current'. Veo que mi 'git clone' también agrega por defecto' remote.origin.fetch = + refs/heads/*: refs/remotes/origin/* 'pero es bastante estándar. – Mort

3

La bandera --set-upstream es obsoleto y se eliminará. Por lo tanto, utilizar --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 
+0

Podría estar en desuso (¿fuente?), Pero '--set-upstream-to =' sigue siendo mencionado por git cuando no conoce su información de seguimiento. Sin mención de desaprobación. –

+0

@AdrienGiboire Aquí hay alguna información acerca de la desaprobación: https://jira.atlassian.com/browse/SRCTREEWIN-588 –

+0

Malo, me di cuenta de que leí mal su publicación. –

2

Sí, hay una configuración que puede ser cambiado en .gitconfig, por ejemplo:

[push] 
    default = current 

lo que empujaría la rama actual para actualizar una rama con el mismo nombre en el extremo receptor.

Comprobar por:

git config --global --get push.default 

Ver: git-config.

+1

@DavidSanders Eliminado, gracias. – kenorb

Cuestiones relacionadas