stash @ {1} ist mehrdeutig?

122

Ich versuche Informationen über meinen Vorrat zu bekommen, aber Git sagt mir das stash@{0}und stash@{1}ist mehrdeutig. git stash listfunktioniert gut und .git/logs/refs/stashscheint den entsprechenden Inhalt zu haben (nicht, dass ich ein Experte für Git-Interna bin).

% 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

Einfach git stash showfunktioniert einfach gut. Warum werden die Namen, git stash listdie mir geben, als mehrdeutig angesehen?

Ungewöhnlich
quelle
1
In meinem Fall hatte ich irgendwie einen Zweig namens benannt stash, der den Fehler verursachte.
Zaz
Und in meinem Fall hatte ich eine Fernbedienung namens stash, die den Fehler verursachte!
Robert Muil

Antworten:

231

Deine Muschel frisst deine geschweiften Klammern, also stash@{1}sieht Git , während du sagst , stash@1und das macht keinen Sinn. Zitieren Sie das Argument (verwenden Sie git stash apply "stash@{1}"oder git stash apply stash@"{1}"; das Zitieren in beide Richtungen funktioniert) oder konfigurieren Sie Ihre Shell so, dass geschweifte Klammern nur dann erweitert werden, wenn ein Komma zwischen ihnen steht (zsh kann so oder so konfiguriert werden, bash erweitert nur geschweifte Klammern mit Komma oder Bereich zwischen ihnen, andere Muscheln können sich auf die eine oder andere Weise verhalten.

Jan Hudec
quelle
1
@sehe: Diejenige, die derzeit ungewöhnlich verwendet wird. Die angegebene Fehlermeldung zeigt dies ganz deutlich an (nein, es scheint, dass es keine Bash sein kann).
Jan Hudec
83
Unter Windows frisst PowerShell auch Klammern. Sie können ihnen mit einem Backtick entkommen(git stash drop stash@`{1`})
Xavier Poinas
8
Danke, das passiert mit Fish, war nicht sicher, was passiert ist.
Elijah Lynn
3
@Sergey verwendet für PowerShell entweder stash @ `{0`} (Backticks) oder 'stash @ {0}' (einfache Anführungszeichen).
Hans
4
Oh mein Gott, über ein Jahr später kam ich wieder darauf zurück, weil ich ein Problem hatte. Zeigt nur, wie selten ich das benutze. Dann, um zu sehen, habe ich einen Kommentar darüber hinterlassen, der sicher genug ist, sagt, dass es mit Fisch passiert. Zu lustig.
Elijah Lynn
23

Hallo, mir ist das Gleiche passiert. Der einfachste Weg, dies zu beheben, war:

$ git stash apply stash@"{2}"

Ich benutze eine Windows Git Shell.

df
quelle
2
Alsogit stash apply "stash@{2}"
Rsenna
1
Arbeitet für Powershell
Rsenna
Das gleiche Git-Stash-Apply "stash @ {2}" hat für mich funktioniert. Beim Versuch, mein drittes Stash zu git-Stash zu machen, wurde die Meldung "unbekannte Option: -encodedCommand" angezeigt. Ich habe Visual Studio-Code verwendet, dessen Terminal eine Powershell-Integration aufweist.
Rajan Chauhan
1

Wenn Sie diesen Fehler haben, während Sie in Emacs mit Magit unter Windows arbeiten (wie ich),
hoffe ich, dass diese schnelle Lösung Ihnen hilft:

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

Dies wird {}in einem dritten Parameter zitiert, in ("stash", "cmd", "stash@{0}")dem von ausgeführt wirdmagit-run-git

Sergey
quelle
1

Für zsh-Benutzer:

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

Setzen Sie einfach die Stash-ID zwischen einfache Anführungszeichen:

git stash apply 'stash@{1}'
Adriano
quelle
3
Wie beantwortet dies die Frage? Es gibt keinen Index Nr. 3 in der Stash-Liste. Wenn dies eine ernsthafte Antwort ist, erklären Sie bitte, warum dieser Befehl das Problem lösen wird
Brad
Ich habe meine Antwort aus Gründen der Klarheit bearbeitet: Die Hauptidee bestand darin, die Stash-ID einfach zwischen einfache Anführungszeichen zu setzen. Dies gilt für Unterbefehle "Anwenden" oder "Löschen". Die Stash-ID-Nummer spielt eigentlich keine Rolle
Adriano
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
DimaSan