La rama remota no se muestra en "git branch -r"


140

He estado empujando a un repositorio remoto de Bitbucket y recientemente un colega ha empujado una nueva sucursal que creó al mismo repositorio.

Estoy tratando de recuperar los cambios que cargó.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origin / master

En la interfaz de usuario web de Bitbucket puedo ver la rama que ha creado. ¿Cómo puedo hacer esto?

Siguiente intento:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Si la rama que creó se llama new_branch_b, ¿ debería esperar ver lo siguiente?

$ git branch -r
origin/master
origin/new_branch_b

Tercer intento:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Cuarto intento:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

Llamé al control remoto en bitbucketlugar de al origen (al menos eso es lo que recuerdo; lo configuré hace un tiempo)

Quinto intento:

Actualicé la configuración remota de Bitbucket según la respuesta de kan :

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Para la mayoría de las personas se llamará origen:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Después,

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... y así.

Creo git fetch originque también funcionaría git remote update.


1
Genial, pero tal vez tenía más sentido usar en refs/remotes/bitbucket/*lugar de refs/remotes/origin/*.
— kan

Gracias, debidamente anotado sobre la coherencia de nombres. Sin embargo, ¡probablemente tenga más sentido cambiar bitbucket a origen! Convención y todo eso :)
— feargal

1
git fetch originhace el trabajo
— Dish

Respuestas:


108

La remotesección también especifica las reglas de búsqueda. Podría agregar algo como esto para obtener todas las ramas del control remoto:

fetch = +refs/heads/*:refs/remotes/origin/*

(O reemplazar origincon bitbucket)

Lea sobre esto aquí: 10.5 Git Internals - The Refspec


3
Esto solucionó mi problema de ramificación en curso en Git que tuve durante semanas. De repente, todas las cosas de actualización remota de git realmente comenzaron a funcionar. ¡Gracias!
— PålOliver

2
Por alguna razón, parecía: fetch = +refs/heads/master:refs/remotes/origin/masterpara mí. Reemplazar masterpor *solucionó mi problema.
— Sebastian Blask

2
Esto es muy útil si ha convertido un clon poco profundo en un no profundo.
— Warpzit

@kan ¿Sabes por qué esto sucede a veces? Simplemente me pasa cuando git cloneun proyecto. No recuerdo haber hecho nada especial con mi git local.
— dotnetCarpenter

@dotnetCarpenter No estoy seguro ... nunca me sucedió inesperadamente. ¿Es posible que haya clonesido interrumpido y luego reanudado? ¿O algo más ha accedido al repositorio al mismo tiempo?
— kan

218

Actualice su control remoto si aún no lo ha hecho:

$ git remote update
$ git branch -r

1
Estoy usando el cliente GitHub en Win y a veces no actualiza las ramas remotas. La primera línea "actualización remota de git" funciona de maravilla. Fácil y limpio
— Stefano Buora

después git remote updatepuedo ver la nueva sucursal en la interfaz de usuario. Gracias
— Tinkaal Gogoi

No sirvió de nada.
— dKab

Creo que ya había traído la rama con éxito, pero solo necesitaba verla en la lista git branch -r. En git-scm.com/docs/git-branch dice "Opción -r hace que se enumeren las ramas de seguimiento remoto, y la opción -a muestra las ramas locales y remotas". git remote updaterecupera todas las ramas de todos los controles remotos enumerados en git remote -v.
— Rock Lee

Después de ejecutar esto, pude correr git checkout origin/mastery luego me git branch master; git checkout master
— bifurqué

35

Si clona con el --depthparámetro, se establece que .git/configno se buscarán todas las ramas, sino solo las maestras.

Simplemente puede omitir el parámetro o actualizar el archivo de configuración desde

fetch = +refs/heads/master:refs/remotes/origin/master

a

fetch = +refs/heads/*:refs/remotes/origin/*

1
¡Gracias! Su respuesta realmente soluciona el problema fácilmente y parece ser la forma correcta de hacerlo. Pero debe agregar que el archivo de configuración está dentro .git/config, para que las personas puedan encontrarlo.
— dotnetCarpenter

19

Tuve el mismo problema. Parece que la solución más fácil es simplemente quitar el control remoto, leerlo y buscarlo.


1
Estaba pasando tanto tiempo para encontrar esta respuesta. Esto funcionó sin ningún problema. Gracias. :)
— kisanme

1
También funcionó para mí, bastante extraño que esto lo resolviera
— CailinP

1
git remote -vle mostrará sus controles remotos para que pueda obtener la URL, la git remote rm origineliminará y la git remote add origin <url>volverá a agregar.
— Siddhartha

Esto funcionó para mí. Tenía un submódulo git que, de alguna manera, no obtuvo ninguna rama remota que la maestra. Eliminarlo y agregarlo nuevamente lo resolvió.
— Zamrony P. Juhara

funcionó para mí, pero ahora recibo una advertenciawarning: ignoring broken ref refs/remotes/origin/HEAD
— dafnahaktana

7

Por desgracia, git branch -ay git branch -rhacerlo sin muestra todas las ramas remotas, si no ha ejecutado un "git fetch".

git remote show origintrabaja constantemente todo el tiempo. También git show-refmuestra todas las referencias en el repositorio de Git. Sin embargo, funciona igual que el git branchcomando.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.