¿stash @ {1} es ambiguo?

122

Estoy tratando de obtener información sobre mi alijo, pero git me lo dice stash@{0}y stash@{1}es ambiguo. git stash listfunciona bien y .git/logs/refs/stashparece tener el contenido apropiado (no es que sea un experto en aspectos internos de git).

% git stash list
stash@{0}: On master: two
stash@{1}: On master: one
% git stash show stash@{1}
fatal: ambiguous argument 'stash@1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Simplemente git stash showfunciona bien. Entonces, ¿por qué los nombres que git stash listme da se consideran ambiguos?

Poco común
fuente
1
En mi caso, de alguna manera terminé con una rama nombrada stash, que estaba causando el error.
Zaz
¡Y en mi caso tenía un control remoto nombrado stash, causando el error!
Robert Muil

Respuestas:

231

Tu caparazón se está comiendo tus llaves, así que mientras dices stash@{1}, git ve stash@1y eso no tiene sentido. Cite el argumento (use git stash apply "stash@{1}"o git stash apply stash@"{1}"; citar de cualquier manera funcionará) o reconfigure su shell para expandir solo los corchetes cuando hay una coma entre ellos (zsh se puede configurar de cualquier manera, bash solo expande los corchetes con coma o rango entre ellos, otro las conchas pueden comportarse de una manera u otra).

Jan Hudec
fuente
1
@sehe: El que Uncommon usa actualmente. El mensaje de error citado lo indica con bastante claridad (no, parece que no puede ser bash).
Jan Hudec
83
En Windows, PowerShell también comerá corchetes. Puedes escapar de ellos con una tilde(git stash drop stash@`{1`})
Xavier Poinas
8
Gracias esto sucede con Fish, no estaba seguro de lo que estaba pasando.
Elijah Lynn
3
@Sergey usa stash @ `{0`} (comillas inversas) o 'stash @ {0}' (comillas simples) para PowerShell.
Hans
4
Oh Dios, más de un año después y volví a esto porque estaba teniendo un problema. Solo muestra cuán raramente uso esto. Luego, para ver, dejé un comentario arriba que, efectivamente, dice que sucede con Fish. Demasiado gracioso.
Elijah Lynn
23

Hola, me pasó lo mismo. La forma más fácil de solucionarlo fue:

$ git stash apply stash@"{2}"

Estoy usando un shell git de Windows.

df
fuente
2
Tambiéngit stash apply "stash@{2}"
rsenna
1
Funciona para powershell
rsenna
El mismo git stash apply "stash @ {2}" funcionó para mí, recibía el mensaje "opción desconocida: -encodedCommand" cuando intentaba guardar mi tercer alijo, estaba usando el código de Visual Studio que tiene integración de PowerShell como terminal.
Rajan Chauhan
1

Si tiene este error mientras trabaja en Emacs con Magit en Windows (como yo)
, espero que esta rápida solución le ayude:

(if (eq system-type 'windows-nt)
    (defadvice magit-run-git (before magit-run-git-win-curly-braces (&rest args) activate)
      "Escape {} on Windows"
      (setcar (nthcdr 2 args) 
              (replace-regexp-in-string "{\\([0-9]+\\)}" "\\\\{\\1\\\\}" (elt args 2)))
    )
  )

Esto se cotizará {}en un tercer parámetro en el ("stash", "cmd", "stash@{0}")que se ejecuta pormagit-run-git

Sergey
fuente
1

Para usuarios de zsh:

$ git stash apply stash@'{'1'}'
user3251328
fuente
1

Simplemente coloque la identificación del alijo entre comillas simples:

git stash apply 'stash@{1}'
Adriano
fuente
3
¿Cómo responde esto a la pregunta? No hay un índice # 3 en la lista de alijo. Si esta es una respuesta seria, explique por qué este comando resolverá el problema
Brad
Edité mi respuesta para mayor claridad: la idea principal era simplemente poner la identificación del alijo entre comillas simples. Se aplica a los subcomandos 'aplicar' o 'eliminar'. El número de identificación de alijo en realidad no importa
Adriano
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código.
DimaSan