134 votes

stash@{1} est ambigu ?

J'essaie d'obtenir des informations sur ma cachette, mais git me dit que stash@{0} et stash@{1} sont ambiguës. git stash list fonctionne bien, et .git/logs/refs/stash semble avoir le contenu approprié (je ne suis pas un expert des mécanismes internes 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 show fonctionne bien. Alors pourquoi les noms que git stash list me donne considérée comme ambiguë ?

1 votes

Dans mon cas, je m'étais retrouvé avec une branche nommée stash qui était à l'origine de l'erreur.

0 votes

Et dans mon cas, j'avais une télécommande nommée stash qui provoque l'erreur !

255voto

Jan Hudec Points 27417

Votre shell mange vos accolades, donc pendant que vous dites stash@{1} , git voit stash@1 et cela n'a aucun sens. Citez l'argument (utilisez git stash apply "stash@{1}" ou git stash apply stash@"{1}" (zsh peut être configuré de l'une ou l'autre façon, bash ne développe les accolades que lorsqu'elles sont séparées par une virgule ou un intervalle, d'autres shells peuvent se comporter de l'une ou l'autre façon).

0 votes

Quelle coquille ? Dans bash, ce n'est pas vrai (par défaut)

1 votes

@sehe : Celui que Uncommon utilise actuellement. Le message d'erreur cité l'indique assez clairement (non, il semble que ça ne puisse pas être bash).

0 votes

Merci ! J'avais oublié que j'avais toujours tcsh comme valeur par défaut sur cet ordinateur.

25voto

d.f Points 231

Bonjour, la même chose m'est arrivée. La façon la plus simple de le réparer était :

$ git stash apply stash@"{2}"

J'utilise un shell git Windows.

2voto

Adriano Points 457

Il suffit de mettre l'identifiant de la cachette entre de simples guillemets :

git stash apply 'stash@{1}'

1voto

Sergey Points 2095

Si vous avez cette erreur en travaillant dans Emacs avec Magit sous 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 permettra de citer {} dans un 3ème paramètre dans ("stash", "cmd", "stash@{0}") qui est dirigé par magit-run-git

1voto

user3251328 Points 158

Pour les utilisateurs de zsh :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X