buscar en git no obtiene todas las ramas

202

He clonado un repositorio, después de lo cual alguien más ha creado una nueva rama, en la que me gustaría comenzar a trabajar. Leí el manual, y parece muy fácil. Curiosamente no funciona, y todas las publicaciones que he encontrado sugieren que estoy haciendo lo correcto. Así que me someteré a la burla, porque obviamente debe haber algo mal con esto:

La acción correcta parece ser

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

En este punto hay un problema, por alguna razón después de git fetchque no puedo ver la rama remota dev-gml. Por qué no? Si clono el repositorio recientemente, está allí, así que ciertamente existe la rama remota:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

He intentado git update, git pull, git fetch --all, git pretty-pleaseen todas las permutaciones posibles ...

Edward Newell
fuente
45
¿Qué git config --get remote.origin.fetchproduce? Si no es así +refs/heads/*:refs/remotes/origin/*, probablemente debería serlo.
torek
sí, eso es exactamente lo que produce
Edward Newell
3
Exactamente el mismo problema, pero el comentario anterior lo resolvió. Tenía +refs/heads/master:refs/remotes/origin/masteren masterlugar de*
Mirko
1
El mismo problema para mí, pero ninguna de las sugerencias en esta página lo resuelve. Extraño.
Magnus
1
@ thoni56: Sí, esto probablemente se deba a un clon superficial.
Trần Việt Hoàng

Respuestas:

386

El problema se puede ver cuando se verifica la remote.origin.fetchconfiguración
(las líneas que comienzan con $bash son indicaciones con los comandos que escribí. Las otras líneas son el resultado resultante)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Como puede ver, en mi caso, el control remoto se configuró para obtener la rama maestra específicamente y solo. Lo arreglé como se muestra a continuación, incluido el segundo comando para verificar los resultados.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

El comodín * por supuesto, significa todo bajo ese camino.

Desafortunadamente, vi este comentario después de que ya había buscado y encontrado la respuesta por prueba y error.

ANDASM
fuente
2
Probablemente esta debería ser la respuesta aceptada, ya que en realidad resolvió el problema en la publicación original.
LocalPCGuy
1
solo una nota al margen, tuve que agregar el --replace-allparámetro para reemplazar todos los valores en la configuración de miremote.origin.fetch
Garis M Suero
44
Tenga en cuenta que esto puede suceder si ha clonado su repositorio con una sola rama, por ejemplogit clone <url> --branch <branch> --single-branch [<folder>]
Narretz
2
Verifique la respuesta de
stux
55
Esto podría suceder cuando clones congit clone ... --depth 1
Anatolii Bivol
107

Tuve este problema hoy en un repositorio.

No fue el +refs/heads/*:refs/remotes/origin/* problema según la solución superior.

El síntoma fue simplemente eso git fetch originogit fetch simplemente no parecía hacer nada, aunque había ramas remotas para buscar.

Después de probar muchas cosas, eliminé el control remoto de origen y lo recreé. Parece que eso lo arregló. No se porque.

eliminar con: git remote rm origin

y recrear con: git remote add origin <git uri>

stux
fuente
14
Tenía la configuración correcta de git para remote.origin.fetchie +refs/heads/*:refs/remotes/origin/*. La solución anterior me ayudó.
Newbee
9
Esta solución fue la correcta para mí también. Esto es lamentable ya que indica que hay potencialmente un error en Git.
Robert Oschler
2
Esto también resolvió mi problema. También parece tener este problema en una máquina con git versión 2.19.1v pero no lo experimenté en otra máquina con git versión 2.17.1
jerpint
66
git remote update origintrabajó para mi. ¿Supongo que algo necesitaba refrescarse?
Felipe Gerard
2
git remote update originno funcionó para mí, pero eliminar y agregar el control remoto sí.
Anatoliy Kmetyuk
58

Actualización remota

Necesitas correr

git remote update

o

git remote update <remote> 

Luego puede ejecutar git branch -rpara enumerar las ramas remotas.

Pagar una nueva sucursal

Para rastrear una (nueva) sucursal remota como una sucursal local:

git checkout -b <local branch> <remote>/<remote branch>

o (a veces no funciona sin el extra remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Útiles git cheatsheets

philipvr
fuente
55
Pero mi problema es que no puedo pagar una rama remota existente , porque mi cliente git no cree que exista. Mira mi pregunta Tenga en cuenta que cuando ejecuto git fetchseguido de git branch -ano muestra todas las ramas. Tuve que eliminar mi directorio de trabajo y volver a clonar para ver la rama dev-gmlque hizo un colaborador. Esta vez funcionó, ¡pero nos vamos a ramificar a menudo!
Edward Newell
Hola @EdwardNewell, gracias por la respuesta, solo para hacerle saber, su enlace cheat.errtheblog.com/s/git está muerto para mí ...
Kjellski
Ha pasado mucho tiempo desde que hice esta pregunta por primera vez, y acabo de recibir un pinche porque alguien publicó de nuevo. Estoy aceptando esta respuesta, aunque originalmente nada realmente funcionó para mí. La razón por la que finalmente marqué este correcto es porque sospecho que lo que escribió junto a él Edit:muy bien podría haber funcionado. Es lo que intentaría si aún enfrentara el problema. HTH
Edward Newell
Para que conste, la parte que me ayudó aquí es git remote update origin. Eso hizo que la rama faltante fuera visible a través de git branch -l -r. (Lo miré git config --get remote.origin.fetchy la producción fue la +refs/heads/*:refs/remotes/origin/*esperada)
Robert Dodier
9

escríbelo desde la terminal

git fetch --prune.

funciona bien.

Samet ÖZTOPRAK
fuente
1
¡Gracias! Intenté muchas cosas y pensé en darle una oportunidad ... Ahora para ver lo que realmente hice ...
MadTurki
¿Qué hace?
Adam Orlov el
Toma todas las ramas disponibles. Mira a la cabeza.
Samet ÖZTOPRAK el
4

Para hacerlo más específico Cree una rama de seguimiento, lo que significa que ahora está rastreando una rama remota.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Después de lo cual puedes

git branch   # to see the remote tracking branch "exp" created .

Luego trabajar en esa rama

git checkout branchname
git checkout exp

Después de haber realizado cambios en la rama. Puede git fetch y git merge con su bifurcación de seguimiento remota para fusionar sus cambios y empujar a la bifurcación remota como se muestra a continuación.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Espero que ayude y te dé una idea de cómo funciona esto.

Swapna
fuente
1

Tuve un problema similar, sin embargo, en mi caso, pude tirar / empujar a la rama remota pero git statusno mostré el estado de la rama local wrt las remotas.

Además, en mi caso git config --get remote.origin.fetchno devolvió nada

El problema es que hubo un error tipográfico en el .git/config archivo en la línea de búsqueda del bloque remoto respectivo. Probablemente algo que agregué por error anteriormente (a veces miro directamente este archivo, o incluso lo edito)

Por lo tanto, verifique si su entrada remota en el .git/configarchivo es correcta, por ejemplo:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
Juh_
fuente
0

Esto podría deberse a un momento de palma de la cara: si cambia entre varios clones, es fácil encontrarse en el árbol de origen incorrecto tratando de extraer una rama inexistente. Es más fácil cuando los clones tienen nombres similares, o los repos son clones distintos para el mismo proyecto de cada uno de los múltiples contribuyentes. Un nuevo clon de git obviamente parece resolver ese "problema" cuando el problema real es perder el enfoque o el contexto de trabajo o ambos.

jerseyboy
fuente
0

Tuve que entrar en mis repositorios remotos GitExtensions ya que nada parecía funcionar. Allí vi que 2 sucursales no tenían un repositorio remoto configurado. después de ajustar se ve de la siguiente maneraingrese la descripción de la imagen aquí

Observe que la rama noExternal3todavía se muestra como que no tiene un repositorio remoto. No estoy seguro de qué combinación de comandos bash habría encontrado o ajustado eso.

Maslow
fuente
0

Tuve el mismo problema hoy al configurar mi repositorio desde cero. Intenté todo, nada funcionó excepto eliminar el origen y volver a agregarlo nuevamente.

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
Lukas Lukac
fuente
-1

Tuvimos el mismo problema y tienes que usar

git fetch

git push origin branch_name

git branch -r

Espero que esto ayude a alguien que enfrenta el mismo problema

chazefate
fuente