tortoise - software git
git refname ''origin/master'' es ambiguo (4)
Hace unos días enfrenté el mismo problema en el que se crearon múltiples referencias de la misma rama.
Cosas que probé:
> git show-ref (will give you the list of references, from the
> references list you can check if there are multiple references created
> for the branch you are working on or not.)
Si hay múltiples referencias creadas, simplemente elimínelas
rm .git/refs/heads/master
Después de eliminar las referencias, puede retirar la sucursal del origen remoto solo si ha introducido algo en ella, de lo contrario, debe rehacer todo lo que hizo en la sucursal
git fetch origin
git checkout origin/branchName
Esta solución me funcionó en caso de ramas ambiguas.
Tengo un repositorio git que rastrea varias ramas remotas:
$ git branch -a
* master
remotes/git-svn
remotes/origin/master
remotes/trunk
Cuando intento configurar uno predeterminado, aparece el siguiente error:
$ git branch --set-upstream-to=origin/master master
warning: refname ''origin/master'' is ambiguous.
fatal: Ambiguous object name: ''origin/master''.
Me gustaría eliminar algunas de las ramas maestras remotas, pero las referencias maestras todavía están allí.
¿Cómo puedo eliminarlos para poder establecer la rama ascendente predeterminada en
origin/master
?
$ git show-ref master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/heads/master
6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
d83f025cd3800ed7acd76b2e52ae296e33f1cd07 refs/original/refs/heads/master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/remotes/origin/master
La salida de
git branch -a
muestra que tiene una rama de seguimiento remoto llamada
origin/master
.
Perfectamente normal.
Sin embargo, la salida de
git show-ref master
contiene
6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
lo que indica que lo más probable es que hayas ejecutado algo como el siguiente comando de bajo nivel:
git update-ref refs/origin/master master
Este comando crea una rama (apuntando al mismo commit que
master
) llamada
origin/master
, pero que vive directamente debajo de
refs/
, es decir,
fuera
del espacio de
refs/heads/
names, donde normalmente viven las ramas locales.
Muy sospechoso ... ¿Querías hacer eso?
Tal rama no aparecerá en la lista por
git branch -a
.
Sin embargo, Git se está confundiendo porque ve dos ramas cuyos nombres de referencia terminan con
origin/master
:
-
refs/remotes/origin/master
, su rama de seguimiento remoto, y -
refs/origin/master
, la sucursal local que creó (por accidente) fuera derefs/heads/
.
Solución
Si no quisiste crear
refs/origin/master
Simplemente elimínelo:
git update-ref -d refs/origin/master
Entonces, no habrá ninguna ambigüedad, y Git cumplirá cuando intentes configurar el
master
en sentido ascendente.
Si quisiste crear
refs/origin/master
Para evitar ambigüedades, simplemente especifique el nombre de referencia
completo
de la rama que desea establecer como
master
ascendente:
git branch --set-upstream-to=refs/remotes/origin/master master
Para arreglar ideas, aquí hay un código que reproduce la situación en uno de mis repositorios de GitHub:
$ cd ~/Desktop
$ git clone https://github.com/Jubobs/gitdags && cd gitdags
$ git update-ref refs/origin/master
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git show-ref master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/heads/master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/origin/master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/HEAD
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/master
$ git branch --set-upstream-to=origin/master master
warning: refname ''origin/master'' is ambiguous.
fatal: Ambiguous object name: ''origin/master''.
$ git update-ref -d refs/origin/master
$ git branch --set-upstream-to=origin/master master
Branch master set up to track remote branch master from origin.
Probablemente creó accidentalmente una referencia local llamada ''origen / maestro''
por ejemplo, si hiciste esto
git branch origin/master
Conduciría a este problema. Este parece sospechoso "referencias / origen / maestro". "refs / heads / master" es su maestro local, "refs / remotes / origin / master" es su referencia de rama remota, y "refs / origin / master" es probablemente un error que lo está arruinando.
Solo necesita eliminar esa referencia (git update-ref -d) y las cosas comenzarán a funcionar nuevamente.
Tuve un problema muy similar debido a una etiqueta accidental llamada "master", que se muestra en
git show-ref master
como
refs/tags/master
.
La solución en este caso fue:
git tag -d master