2010-06-28 9 views
67

Tengo este mensaje de Git:mensaje de error confusos de git

Se le pidió que tirara del 'origen' a distancia, pero no especificó una rama. Como este no es el control remoto predeterminado configurado para su sucursal actual, debe especificar una bifurcación en la línea de comando.

¿Alguien puede explicarlo? y más importante cómo arreglarlo?

Respuesta

66

usted tiene que decir qué rama git desea tirar del "origen" repos remotas.

supongo desea que la rama por omisión (maestro) para git pull origin master debería solucionar su problema.

Consulte git help branch, git help pull y git help fetch para obtener más información.

+2

para hacerlo funcionar tuve que verificar la rama "principal" (no se seleccionó ninguna rama) y tirar, eso solucionó el problema. – cinek

+0

@cinek: Sí, 'git pull' se extrae y se fusiona con la * rama actual * por lo que su comportamiento depende completamente de qué rama esté desprotegida, y con un HEAD separado (sin rama desprotegida), no hay manera de que pueda saber qué rama para tirar. – Cascabel

+0

@cinek: Supuse que eras nuevo en git, así que admito que estabas en un estado totalmente estándar en Branch Master, mi mal :-). – p4bl0

4

Mensaje dice exactamente de qué se trata. Su sucursal actual no está asociada con (no está rastreando) ninguna sucursal en origen. Entonces git no sabe qué tirar.

¿Qué hacer? Eso depende ...

En situación más habitual está trabajando fuera algunos locales rama XYZ, que brotado de maestro que se clona a partir origen 's maestro. La forma habitual de resolverlo es cambiar a maestro y tirar para sincronizarlo con origen y luego volver a xyz y rebase master.

Pero en su situación es posible que desee hacer algo más. No podemos saberlo sin conocer los detalles de sus ramas y controles remotos y cómo intenta utilizarlos.

70

solucionarlo, asumiendo que son en la rama master y quieren tirar de la rama master del origin remoto, en las nuevas versiones Git suficiente (1.8 o posterior):

git branch -u origin/master master 

(análoga para otras ramas . y/o mandos a distancia)

Si se puede combinar esto con un empujón, que es aún más corto:

git push -u origin master 

a partir de entonces, una llanura git pull/git push hará lo que esperas.


Durante la serie Git 1.7, git branch no tienen el interruptor -u (sólo git push lo hicieron), y en su lugar había que utilizar el mucho más tiempo --set-upstream:

git branch --set-upstream master origin/master 

Nota la reversión de argumentos en comparación con -u. Busqué esta orden más de una vez.


Todos ellos, por cierto, son abreviaturas de hacer lo siguiente, que todavía se puede hacer de forma explícita:

git config branch.master.remote origin 
git config branch.master.merge refs/heads/master 

Antes de 1,7, que tenían a hacerlo de esta manera.

+0

Creo que el comando en la parte superior (al menos en mi versión de Git) establece el origen de una rama llamada "origen" como "origen/maestro". Si su rama localmente se llama "maestro" creo que le gustaría: 'git branch --set-upstream master master/master' –

+0

Woops. Gracias, Evan, arreglado. –

+0

Curiosamente, la opción '-u' no está documentada para' git branch' en mi versión, 1.8.5.3, lo que hace que su documentación aquí sea aún más importante. Y, como nota, la opción no estaba disponible en la versión 1.7. *. Como '-u' es la abreviatura de' --set-upstream', ¿no debería invertirse el orden de sus argumentos como lo hizo para '--set-upstream' debido al comentario de @EvanDonovan? – hobs

Cuestiones relacionadas