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://[email protected]':
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://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Cuarto intento:

[remote "bitbucket"]
url = https://[email protected]/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://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

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

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

Después,

$ git remote update

Fetching bitbucket
Password for 'https://[email protected]':
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.

temible
fuente
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

kan
fuente
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
Bruno
fuente
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/*
Donpaulie
fuente
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.

jessicah
fuente
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.

Thushan
fuente