stash @ {1} è ambiguo?


122

Sto cercando di ottenere informazioni sulla mia scorta, ma git me lo dice stash@{0}e stash@{1}sono ambigui. git stash listfunziona bene e .git/logs/refs/stashsembra avere il contenuto appropriato (non che io sia un esperto di interni di 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

Semplicemente git stash showfunziona bene. Allora perché i nomi che git stash listmi dà sono considerati ambigui?


1
Nel mio caso, in qualche modo mi sono ritrovato con un ramo chiamato stash, che stava causando l'errore.
Zaz

E nel mio caso avevo un telecomando chiamato stash, che causava l'errore!
Robert Muil

Risposte:


231

Il tuo guscio sta mangiando le tue parentesi graffe, quindi mentre dici stash@{1}, git vede stash@1e questo non ha senso. Cita l'argomento (usa git stash apply "stash@{1}"o git stash apply stash@"{1}"; la citazione in entrambi i modi funzionerà) o riconfigura la tua shell per espandere solo le parentesi graffe quando c'è una virgola tra di loro (zsh può essere configurato in entrambi i modi, bash espande solo le parentesi graffe con virgola o intervallo tra di loro, altro le shell possono comportarsi in un modo o nell'altro).


1
@sehe: quello attualmente utilizzato da Uncommon. Il messaggio di errore citato lo indica abbastanza chiaramente (no, sembra che non possa essere bash).
Jan Hudec

83
Su Windows, PowerShell manterrà anche le parentesi. Puoi sfuggirgli con un backtick(git stash drop stash@`{1`})
Xavier Poinas

8
Grazie questo accade con Fish, non ero sicuro di cosa stesse succedendo.
Elijah Lynn

3
@Sergey usa stash @ `{0`} (backtick) o 'stash @ {0}' (virgolette singole) per PowerShell.
Hans

4
Oh mio Dio, più di un anno dopo e sono tornato di nuovo su questo perché avevo un problema. Mostra solo quanto raramente lo uso. Poi per vedere ho lasciato un commento sopra quello abbastanza sicuro, dice che succede con Fish. Troppo divertente.
Elijah Lynn

23

Salve, mi è successa la stessa cosa. Il modo più semplice per risolverlo era:

$ git stash apply stash@"{2}"

Sto usando una shell git di Windows.


2
Inoltregit stash apply "stash@{2}"
rsenna

1
Works for powershell
rsenna

lo stesso git stash apply "stash @ {2}" ha funzionato per me, stavo ricevendo il messaggio "unknown option: -encodedCommand" quando cercavo di git stash il mio terzo stash, stavo usando il codice di Visual Studio che ha l'integrazione di powershell come terminale.
Rajan Chauhan

1

Se hai questo errore mentre lavori in Emacs con Magit su Windows (come me)
spero che questa rapida soluzione ti possa aiutare:

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

Questo citerà {}in un terzo parametro in ("stash", "cmd", "stash@{0}")cui è gestito damagit-run-git



1

Metti semplicemente l'ID stash tra virgolette semplici:

git stash apply 'stash@{1}'

3
Come risponde questo alla domanda? Non c'è alcun indice n.3 nella lista delle scorte. Se questa è una risposta seria, spiega perché questo comando risolverà il problema
Brad

Ho modificato la mia risposta per chiarezza: l'idea principale era quella di inserire semplicemente l'ID di scorta tra virgolette semplici. Si applica ai sottocomandi "applica" o "elimina". Il numero di identificazione della scorta in realtà non ha importanza
Adriano

Sebbene questo snippet di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
DimaSan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.