git - falacias - fatal: argumento ambiguo ''origen'': revisión desconocida o ruta que no está en el árbol de trabajo
falacias de ambiguedad o de claridad (4)
git diff origin
menudo en el pasado
En un entorno diferente no funciona. No tengo ni idea de por qué.
user@host> git diff origin
fatal: ambiguous argument ''origin'': unknown revision or path
not in the working tree.
Use ''--'' to separate paths from revisions, like this:
''git <command> [<revision>...] -- [<file>...]''
Estado:
user@host> git status
On branch master
nothing to commit, working directory clean
Mandos a distancia
user@host> git remote -v
origin https://example.com/repos/djangotools (fetch)
origin https://example.com/repos/djangotools (push)
Versión:
user@host> git --version
git version 2.7.4
Con "git version 1.8.1.4" trabaja git diff origin
.
Por cierto , veo el mismo mensaje de error si uso "git diff origin / master"
BTW2, creo que el "/ master" es redundante. El valor predeterminado de Sane es comparar la sucursal local con la misma sucursal en el sitio remoto.
A veces las cosas pueden ser más simples. Vine aquí con el problema exacto y probé todas las sugerencias. Pero luego descubrí que el problema era simplemente que la ruta del archivo local era diferente y que estaba en una carpeta diferente. :-)
p.ej -
~ / myproject / mygitrepo / app / $ git diff app / TestFile.txt
debería haber sido
~ / myproject / mygitrepo / app / $ git diff TestFile.txt
El comando git diff
normalmente espera que uno o más hashes de confirmación generen su diff. Parece que estás suministrando el nombre de un control remoto.
Si tuviera una rama con el nombre de origin
, el hash de confirmación en la punta de la rama se habría utilizado si hubiera proporcionado origin
al comando diff, pero actualmente (sin la rama correspondiente) el comando producirá el error que está viendo. Puede ser el caso de que anteriormente estuviera trabajando con una rama llamada origin
.
Una alternativa, si está tratando de ver la diferencia entre su sucursal local, y una sucursal en un control remoto sería algo como:
git diff origin/<branchname>
git diff <branchname> origin/<branchname>
U otras variantes documentadas .
Edit: habiendo leído más, me doy cuenta de que estoy un poco equivocado, el git diff origin
es una abreviatura para diferenciar contra la cabeza del control remoto especificado, por lo que git diff origin
= git diff origin/HEAD
(¿ comparar la rama local de git con la rama remota? ¿Se muestra "origin / HEAD" cuando se ejecuta "git branch -r"? )
Parece que su origen no tiene una CABEZA, en mi caso esto se debe a que mi control remoto es un repositorio simple que nunca ha tenido un conjunto de CABEZA.
Ejecutar git branch -r
le mostrará si se establece el origin/HEAD
, y si es así, a qué rama apunta (por ejemplo, origin/HEAD -> origin/<branchname>
).
Esto funcionó para mí al ganar. Reemplace REL_PATH_TO_FILE con la ruta relativa al archivo para eliminar https://help.github.com/articles/removing-sensitive-data-from-a-repository/ Los documentos dicen que la ruta completa, pero con errores Para mí, así que probé el camino de rel y funcionó.
<from the repo dir>git filter-branch --force --index-filter "git rm --cached --ignore-unmatch REL_PATH_TO_FILE" --prune-empty --tag-name-filter cat -- --all
Me encontré con la misma situación en la que comandos como git diff origin
o git diff origin master
produjeron el error reportado en la pregunta, es decir, Fatal: ambiguous argument...
Para resolver la situación, ejecuté el comando.
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
para configurar refs / remotes / origin / HEAD para que apunte al origen / rama principal.
Antes de ejecutar este comando, la salida de git branch -a
era:
* master
remotes/origin/master
Después de ejecutar el comando, el error ya no ocurrió y la salida de git branch -a
fue:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
(Otras respuestas ya han identificado que la fuente del error es que HEAD no se está configurando para el origen. Pero me pareció útil proporcionar un comando que se pueda usar para corregir el error en cuestión, aunque puede ser obvio para algunos usuarios).
Información Adicional:
Para cualquiera que esté dispuesto a experimentar y avanzar y retroceder entre la configuración y la eliminación de refs / remotes / origin / HEAD, aquí hay algunos ejemplos.
Desarmar:
git remote set-head origin --delete
Para establecer:
(formas adicionales, además de la forma que se muestra al comienzo de esta respuesta)
git remote set-head origin master
para establecer origen / cabeza explícitamente
O
git remote set-head origin --auto
para consultar el control remoto y establecer automáticamente el origen / HEAD en la rama actual del control remoto.
Referencias:
- Esta respuesta tan
- Este comentario de SO y su respuesta asociada
-
git remote --help
ver descripción de set-head -
git symbolic-ref --help