2011-09-12 5 views
117

TL; DR: Tengo una rama "rastreado" que no puedo extraer.Usted me pidió que tire sin decirme qué rama desea fusionar con

Así que aquí estoy en el "cubo-4":

$ git branch -v 
    bucket-1  410f7b5 * gh-53 * gh-48 * "Share App" 
    bucket-2  7ed70a2 * upgrade to SOLR 3.3.0 
    bucket-3  400ffe4 * emergency fix prod issue 
* bucket-4  64c2414 Merge branch 'bucket-3' into bucket-4 
    master   8dc4854 [ahead 1] * gh-73 

me gustaría traer cambios de mi remota:

$ git pull 

You asked me to pull without telling me which branch you 
want to merge with, and 'branch.bucket-4.merge' in 
your configuration file does not tell me, either. Please 
specify which branch you want to use on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details. 

If you often merge with the same branch, you may want to 
use something like the following in your configuration file: 

    [branch "bucket-4"] 
    remote = <nickname> 
    merge = <remote-ref> 

    [remote "<nickname>"] 
    url = <url> 
    fetch = <refspec> 

See git-config(1) for details. 

Hmm, extraño, pensé que ya se han agregado "bucket-4" como una rama de seguimiento. Veamos:

$ git remote show origin 
* remote origin 
    Fetch URL: [email protected]:abcd/main.git 
    Push URL: [email protected]:abcd/main.git 
    HEAD branch (remote HEAD is ambiguous, may be one of the following): 
    bucket-3 
    master 
    Remote branches: 
    bucket-1  tracked 
    bucket-2  tracked 
    bucket-3  tracked 
    bucket-4  tracked 
    master   tracked 
    Local branches configured for 'git pull': 
    bucket-1  merges with remote bucket-1 
    bucket-2  merges with remote bucket-2 
    bucket-3  merges with remote bucket-3 
    master   merges with remote master 
    Local refs configured for 'git push': 
    bucket-1  pushes to bucket-1  (up to date) 
    bucket-2  pushes to bucket-2  (up to date) 
    bucket-3  pushes to bucket-3  (up to date) 
    bucket-4  pushes to bucket-4  (local out of date) 
    master   pushes to master   (fast-forwardable) 

De hecho, cubo-4 está marcado como "seguimiento", pero de alguna manera está configurado para empujar, pero no tire.

Al mirar mi archivo .git/config, veo que tengo entradas "remotas" y "fusionar" para la mayoría de mis ramas, pero no para la cubeta-4. ¿Cómo se lo considera "seguido" sin esto?

[remote "origin"] 
    url = [email protected]:abcd/main.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[branch "rel-2011-07-07"] 
    remote = origin 
    merge = refs/heads/rel-2011-07-07 
[branch "bucket-1"] 
    remote = origin 
    merge = refs/heads/bucket-1 
[branch "bucket-2"] 
    remote = origin 
    merge = refs/heads/bucket-2 
[branch] 
    autosetupmerge = true 
[branch "bucket-3"] 
    remote = origin 
    merge = refs/heads/bucket-3 

veo que la solución probable aquí es agregar remote/merge entradas para balde-4 en mi archivo de configuración. Pero, ¿cómo se considera "rastreado" sin esto? bucket-4 se creó localmente, luego se envió al servidor desde este repositorio, por lo que sospecho que de alguna manera no configuré el seguimiento correctamente para esta rama.

¿Hay alguna configuración que pueda agregar para hacer que todas las sucursales locales sigan sus controles remotos correctamente en el futuro?

+2

Esta pregunta me apuntó en la dirección correcta, solo tuve que agregar una entrada en mi archivo .git/config para la rama que estaba tratando de extraer, y funcionó bien. –

+0

Yup me too, y la manera de hacerlo es como Mark Longair se describe a continuación con la rama git --set-upstream bucket-4 origin/bucket-4 –

Respuesta

183

Dice bucket-4 pushes to bucket-4 simplemente porque el valor predeterminado cuando se empuja una rama es presionarla con el nombre correspondiente en el control remoto. (Tenga en cuenta que esto sigue siendo la opción predeterminada, incluso si la sección local es el seguimiento de una rama de seguimiento remoto y la rama de seguimiento a distancia corresponde a una rama con un nombre diferente en el repositorio remoto.)

La forma más sencilla para establecer la asociación entre su bucket-4bucket-4 y en origin es asegurarse de que la próxima vez que se pulsa, se debe hacer:

git push -u origin bucket-4 

Alternativamente, se puede hacer:

git branch --set-upstream bucket-4 origin/bucket-4 

Para responder a un par de sus preguntas directamente:

¿Cómo se consideró incluso "seguimiento" sin que esto?

En este caso no lo es - no es el seguimiento de la rama de seguimiento remoto en ningún sentido si no hay branch.bucket-4.merge o branch.bucket-4.remote en su git config. La salida de git remote show origin le muestra dónde se moverá la bifurcación por defecto.

¿Hay alguna configuración que pueda agregar para hacer que todas las sucursales locales rastreen sus controles remotos correctamente en el futuro?

No creo que exista.Cuando creó bucket-4 localmente, como supongo que sucedió, la rama de seguimiento remoto no existía, por lo que no se puede configurar en ese punto; sería un comportamiento predeterminado muy confuso. Solo necesita recordar agregar -u a su primer git push de esa rama a su repositorio en sentido ascendente.

Espero que sea de alguna ayuda.

+7

El parámetro "-u" hizo el truco. – neoneye

+7

'git branch --set-upstream' funcionó perfectamente para mí antes de hacer el pull – ohaal

+0

git branch --set-upstream bucket-4 origin/bucket-4 funcionó para mí :-) – Aliza

3

git branch --set-upstream <branch> origin/<branch> estaba obsoleto al menos desde 1.8.2.3 (mi versión).

Use git branch --set-upstream-to=origin/<branch> <branch> en su lugar.

+2

¿Quisiste decir que esto es un comentario sobre [respuesta de Mark] (http://stackoverflow.com/a/7388440/456814)? Además, en realidad estaba en desuso en [Git versión 1.8.0] (https://github.com/git/git/blob/v2.0.4/Documentation/RelNotes/1.8.0.txt#L42-L47). –

Cuestiones relacionadas