stash @ {1} é ambíguo?

122

Estou tentando obter informações sobre meu estoque, mas o git está me dizendo isso stash@{0}e stash@{1}é ambíguo. git stash listfunciona bem e .git/logs/refs/stashparece ter o conteúdo apropriado (não que eu seja um especialista em git internals).

% 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

Simplesmente git stash showfunciona bem. Então, por que os nomes que git stash listme dão são considerados ambíguos?

Incomum
fonte
1
No meu caso, de alguma forma, acabei com um ramo chamado stash, que estava causando o erro.
Zaz
E no meu caso, eu tinha um controle remoto chamado stash, causando o erro!
Robert Muil

Respostas:

231

Seu shell está comendo seus colchetes, então enquanto você diz stash@{1}, o git vê stash@1e isso não faz sentido. Cite o argumento (use git stash apply "stash@{1}"ou git stash apply stash@"{1}"; citar de qualquer maneira funcionará) ou reconfigure seu shell para expandir somente colchetes quando houver uma vírgula entre eles (o zsh pode ser configurado de qualquer maneira, o bash só expande colchetes com vírgula ou intervalo entre eles, outro conchas podem se comportar de uma ou de outra maneira).

Jan Hudec
fonte
1
@sehe: O Uncommon atualmente usa. A mensagem de erro citada indica isso claramente (não, parece que não pode ser bash).
Jan Hudec
83
No Windows, o PowerShell também comerá colchetes. Você pode escapar deles com uma crase(git stash drop stash@`{1`})
Xavier Poinas
8
Graças isso acontece com Fish, não tinha certeza do que estava acontecendo.
Elijah Lynn
3
O @Sergey usa stash @ `{0`} (backticks) ou 'stash @ {0}' (aspas simples) para o PowerShell.
28414 Hans
4
Oh meu Deus, mais de um ano depois, e voltei a isso novamente porque estava tendo um problema. Apenas mostra o quão raramente eu uso isso. Então, para ver, deixei um comentário acima disso com certeza, diz que isso acontece com o Fish. Muito engraçado.
Elijah Lynn
23

Olá, aconteceu o mesmo comigo. A maneira mais fácil de corrigir era:

$ git stash apply stash@"{2}"

Estou usando um shell git do windows.

df
fonte
2
Tambémgit stash apply "stash@{2}"
rsenna
1
Works for powershell
rsenna
o mesmo git stash apply "stash @ {2}" funcionou para mim, eu estava recebendo a mensagem "unknown option: -encodedCommand" ao tentar git stash no meu terceiro stash, estava usando o código do visual studio que possui integração com o PowerShell como terminal.
Rajan Chauhan
1

Se você tiver esse erro enquanto trabalha no Emacs com Magit no Windows (como eu)
, espero que esta solução rápida o ajude:

(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)))
    )
  )

Isso citará {}um terceiro parâmetro no ("stash", "cmd", "stash@{0}")qual é executado pormagit-run-git

Sergey
fonte
1

Para usuários zsh:

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

Basta colocar o stash id entre aspas simples:

git stash apply 'stash@{1}'
Adriano
fonte
3
Como isso responde à pergunta? Não há índice # 3 na lista stash. Se esta é uma resposta séria por favor explicar por que este comando vai resolver o problema
Brad
Editei minha resposta para maior clareza: a idéia principal era simplesmente colocar o stash id entre aspas simples. Aplica-se aos subcomandos 'apply' ou 'drop'. O número esconderijo id realmente não importa
Adriano
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
DimaSan