Esto parece un error popular por diferentes causas.
Tengo un repositorio de git simple llamado "kiflea.git", lo clono así:
git clone git://kipdola.be/kiflea.git
Entonces git me dice: warning: remote HEAD refers to nonexistent ref, unable to checkout.
Y sí, no hay archivos versionados en el mapa, excepto el directorio .git. De todos modos, lo único que tengo que hacer es:
cd kiflea
git checkout master
Y funciona, todos los archivos están ahí. Pero pensé que la clonación de un repositorio verifica automáticamente el maestro, entonces, ¿qué está pasando exactamente y cómo lo soluciono?
Me he dado cuenta de que, después de hacer el git checkout master
bit, esto se agrega a mi archivo de configuración .git local:
[branch "master"]
remote = origin
merge = refs/heads/master
Probablemente sea interesante saber que este repositorio de git solía ser un repositorio de svn en un pasado lejano.
Ps: al navegar por el repositorio simple usando gitweb, claramente hay una master
rama allí: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
te muestra?checkout master
bit:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. ¿Tiene acceso directo a él? Si es así, vea aquígit clone -b master <url> <dir>
Respuestas:
Los
warning: remote HEAD refers to nonexistent ref, unable to checkout.
medios de que el mando a distancia (desnudo) repositorio contiene referencia rama en el archivo llamadoHEAD
que no coincide con ninguna rama publicado en el mismo repositorio.Tenga en cuenta que la advertencia solo significa que git no realizó el pago. El repositorio clonado está bien por lo demás. Solo hazlo
git branch -a
para ver posibles ramas ygit checkout the-branch-you-want
solucionar el problema.Esto suele suceder porque el contenido predeterminado para ese archivo (
.git/HEAD
o simpleHEAD
para repositorios desnudos) es elref: refs/heads/master
que dice que si alguien va aclone
este repositorio, debería clonar la rama por defectorefs/heads/master
. De forma predeterminada, Git creará una rama local sin elrefs/heads/
prefijo (es decir,master
de forma predeterminada). Intentegit help symbolic-ref
obtener más información.El problema con esta situación es que Git no proporciona un método para modificar referencias simbólicas remotas, por lo que puede usar algo que el proveedor de alojamiento de Git haya implementado (por ejemplo, Configuración - Rama predeterminada en GitHub si tiene derechos de administrador) o tiene que usar el nombre de la rama
master
como la rama predeterminada (porque ese es el valor predeterminado para esa referencia simbólica).Si tiene acceso de shell a su repositorio de git remoto, puede simplemente
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
dóndeXYZ
está el nombre de la rama que desea usar de forma predeterminada.Una forma de solucionar este problema es crear un nuevo repositorio desnudo remoto sin confirmaciones y luego hacer
git push name-of-the-remote my-special-branch-name
lo que resultará en un repositorio vacío que contenga una sola rama,my-special-branch-name
pero laHEAD
referencia simbólica aún contiene el valor predeterminado que apuntamaster
. Como resultado, recibirá la advertencia antes mencionada.fuente
checkout
. El repositorio clonado está bien por lo demás. Hazlogit branch -a
para ver posibles ramificaciones ygit checkout the-branch-you-want
"solucionar" el problema.git clone -b master
(o cualquiera que sea el nombre de la rama existente).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
dondeXYZ
es el nombre de rama predeterminado que desea utilizar sigit clone
se hace sin la-b
bandera. Si tiene algún otro problema, haga una nueva pregunta en lugar de agregar preguntas como comentarios.Tuve el mismo problema porque ya no usaba la
master
rama y se perdió en mi repositorio local y remoto.El repositorio remoto todavía tenía
HEAD
configuradomaster
, lo cambié a una de las ramas remotas que realmente uso y todo funciona bien.Si puede acceder a su repositorio remoto:
remote_repo.git
;HEAD
archivoref: refs/heads/master
aref: refs/heads/your_branch
fuente
broken_branch
conrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
dondeXYZ
es el nombre de rama predeterminado que desea usar sigit clone
se hace sin la-b
bandera, como dije en otro comentario.Sí, esto está relacionado con su clon de git que intenta verificar una rama diferente a la maestra. Solo haz esto
Esto le ayudará a clonar la rama exacta a través de su nombre de rama.
fuente
A pesar de que se mostró este error, mi proyecto todavía estaba conectado al repositorio correspondiente, ejecuté el
git branch
comando y vi las ramas adecuadas, luego ejecutégit checkout *branchname
y BOOM, todo estaba bien.fuente
Definitivamente hay algo mal con su repositorio remoto. Es posible que pueda solucionarlo haciendo un nuevo clon del repositorio. También podría funcionar enviar una nueva confirmación a la rama maestra.
fuente
Supongo que es el líder
*
en el registro de confirmación lo que de alguna manera engaña al servidor remoto.Puedo navegar por la interfaz web del repositorio usando algunos de los enlaces del menú, pero otros fallan con un
404 - Unknown commit object
o similar, particularmente desde la página de resumen.Vea si puede enmendar ese último mensaje de confirmación y luego forzar la actualización para ver si eso lo soluciona. Puede haber un error en el demonio del servidor. Si lo soluciona, valdría la pena informar en la lista de git [email protected] (solo mensajes de texto sin formato)
fuente
Tuve el mismo problema al crear un repositorio básico.
Lo resolví simplemente clonando el repositorio, creando una rama maestra local y luego empujando el maestro al repositorio remoto.
1) clonar el repositorio
2) cree una rama maestra localmente.
3) cometer algo en la sucursal local
4) Empuje maestro local en el control remoto
fuente
Si no hay una rama maestra realmente disponible, verifique lo siguiente; Si hay un archivo llamado 'pack-refs' dentro de la carpeta '.git', ábralo y podrá encontrar todas las referencias en la lista.
Algo como a continuación;
Entonces usa;
O
para verificar la versión requerida. Gracias.
fuente
Parecía arreglarlo con:
Esto creó el maestro predeterminado, y luego pude verificar mis otras ramas
fuente
En mi caso, el repositorio estaba vacío.
fuente
Para Gitlab, incluso si muestra que estás en una rama predeterminada (por ejemplo,
master
es posible que no estés en ella), configurándolo de nuevo, arréglalo, así:asd
master
asd
master
asd
ramaListo, ahora tu rama predeterminada es
master
fuente