stash @ {1} est ambigu?

122

J'essaie d'obtenir des informations sur ma réserve, mais git me le dit stash@{0}et stash@{1}est ambigu. git stash listfonctionne bien, et .git/logs/refs/stashsemble avoir le contenu approprié (non pas que je sois un expert en interne 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

Tout simplement git stash showfonctionne bien. Alors pourquoi les noms qui git stash listme donnent sont-ils considérés comme ambigus?

Rare
la source
1
Dans mon cas, je me suis retrouvé en quelque sorte avec une branche nommée stash, ce qui causait l'erreur.
Zaz
Et dans mon cas, j'avais une télécommande nommée stash, provoquant l'erreur!
Robert Muil

Réponses:

231

Votre shell mange vos accolades, alors pendant que vous dites stash@{1}, git voit stash@1et cela n'a aucun sens pour cela. Citez l'argument (utilisez git stash apply "stash@{1}"ou git stash apply stash@"{1}"; citation de l'une ou l' autre manière fonctionnera) ou reconfigurez votre shell pour développer uniquement les accolades lorsqu'il y a une virgule entre eux (zsh peut être configuré dans les deux sens, bash ne développe que les accolades avec une virgule ou une plage entre eux, autre les coquilles peuvent se comporter d’une manière ou d’une autre).

Jan Hudec
la source
1
@sehe: celui qu'utilise actuellement Uncommon. Le message d'erreur cité l'indique assez clairement (non, il semble que cela ne puisse pas être bash).
Jan Hudec
83
Sous Windows, PowerShell mange également des crochets. Vous pouvez leur échapper avec un backtick(git stash drop stash@`{1`})
Xavier Poinas
8
Merci cela arrive avec Fish, n'était pas sûr de ce qui se passait.
Elijah Lynn
3
@Sergey utilise stash @ `{0`} (backticks) ou 'stash @ {0}' (guillemets simples) pour PowerShell.
Hans
4
Oh mon Dieu, plus d'un an plus tard et j'y suis revenu à nouveau parce que j'avais un problème. Montre juste à quel point je l'utilise rarement. Ensuite, pour voir j'ai laissé un commentaire ci-dessus, bien sûr, dit que cela arrive avec Fish. Trop drôle.
Elijah Lynn
23

Salut, j'ai eu la même chose qui m'est arrivée. Le moyen le plus simple de résoudre ce problème était:

$ git stash apply stash@"{2}"

J'utilise un shell git windows.

df
la source
2
Aussigit stash apply "stash@{2}"
rsenna
1
Fonctionne pour
PowerShell
même git stash apply "stash @ {2}" a fonctionné pour moi, je recevais le message "unknown option: -encodedCommand" en essayant de git stash mon 3e stash, j'utilisais du code Visual Studio qui a une intégration PowerShell comme terminal.
Rajan Chauhan
1

Si vous rencontrez cette erreur en travaillant dans Emacs avec Magit sur Windows (comme moi),
j'espère que cette solution rapide vous aidera:

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

Cela va citer {}dans un 3ème paramètre dans ("stash", "cmd", "stash@{0}")lequel est exécuté parmagit-run-git

Sergey
la source
1

Pour les utilisateurs zsh:

$ git stash apply stash@'{'1'}'
user3251328
la source
1

Mettez simplement l'identifiant entre guillemets simples:

git stash apply 'stash@{1}'
Adriano
la source
3
Comment cela répond-il à la question? Il n'y a pas d'index # 3 dans la liste des réserves. S'il s'agit d'une réponse sérieuse, veuillez expliquer pourquoi cette commande résoudra le problème
Brad
J'ai édité ma réponse pour plus de clarté: l'idée principale était de simplement mettre l'identifiant de la cachette entre de simples guillemets. Il s'applique aux sous-commandes «apply» ou «drop». Le numéro d'identification de la réserve n'a pas vraiment d'importance
Adriano
Bien que cet extrait de code puisse résoudre la question, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
DimaSan