stash @ {1} jest niejednoznaczne?

122

Próbuję uzyskać informacje o moim skrytce, ale dupek mi to mówi stash@{0}i stash@{1}są niejednoznaczne. git stash listdziała dobrze i .git/logs/refs/stashwydaje się, że ma odpowiednią zawartość (nie żebym był ekspertem w zakresie wewnętrznych elementów 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

Po prostu git stash showdziała dobrze. Dlaczego więc nazwy, które git stash listmi nadają, są uważane za niejednoznaczne?

Niezwykły
źródło
1
W moim przypadku jakoś skończyłem z nazwą gałęzi stash, która powodowała błąd.
Zaz
A w moim przypadku miałem pilota nazwanego stash, powodując błąd!
Robert Muil

Odpowiedzi:

231

Twoja muszla zjada twoje nawiasy kręcone, więc kiedy mówisz stash@{1}, git widzi stash@1i to nie ma dla niego sensu. Cytuj argument (użyj git stash apply "stash@{1}"lub git stash apply stash@"{1}"; cytowanie w obie strony zadziała) lub zmień konfigurację powłoki, aby rozszerzać nawiasy klamrowe tylko wtedy, gdy między nimi jest przecinek (zsh można skonfigurować w dowolny sposób, bash rozwija tylko nawiasy klamrowe przecinkiem lub zakresem między nimi, inne muszle mogą zachowywać się w ten lub inny sposób).

Jan Hudec
źródło
1
@sehe: ten, którego obecnie używa Uncommon. Zacytowany komunikat o błędzie wskazuje na to dość wyraźnie (nie, wydaje się, że to nie może być bash).
Jan Hudec
83
W systemie Windows PowerShell również zje nawiasy. Możesz uciec przed nimi za pomocą backticka(git stash drop stash@`{1`})
Xavier Poinas
8
Dzięki temu dzieje się z Fishem, nie byłem pewien, co się dzieje.
Elijah Lynn,
3
@Sergey użyj albo stash @ `{0`} (lewy apostrof), albo 'stash @ {0}' (pojedyncze cudzysłowy) dla PowerShell.
Hans
4
Ojej, ponad rok później wróciłem do tego ponownie, ponieważ miałem problem. Pokazuje tylko, jak rzadko tego używam. Potem, aby zobaczyć, zostawiłem komentarz powyżej, że na pewno, mówi, że dzieje się z Fish. Zbyt śmieszne.
Elijah Lynn
23

Cześć, spotkało mnie to samo. Najłatwiejszym sposobem naprawy było:

$ git stash apply stash@"{2}"

Używam powłoki git systemu Windows.

df
źródło
2
Równieżgit stash apply "stash@{2}"
rsenna
1
Działa dla PowerShell
rsenna
ten sam plik git stash zastosuj „stash @ {2}” działał dla mnie, otrzymałem komunikat „nieznana opcja: -encodedCommand” podczas próby umieszczenia mojego trzeciego skrytki w git. Używałem kodu Visual Studio, który ma integrację z PowerShell jako terminal.
Rajan Chauhan
1

Jeśli masz ten błąd podczas pracy w Emacs z Magit na Windows (tak jak ja),
mam nadzieję, że to szybkie rozwiązanie pomoże ci:

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

Spowoduje to zacytowanie {}trzeciego parametru, w ("stash", "cmd", "stash@{0}")którym jest uruchamiany przezmagit-run-git

Siergiej
źródło
1

Dla użytkowników zsh:

$ git stash apply stash@'{'1'}'
user3251328
źródło
1

Po prostu umieść identyfikator skrytki między prostymi cudzysłowami:

git stash apply 'stash@{1}'
Adriano
źródło
3
Jak to odpowiada na pytanie? Na liście skrytek nie ma indeksu nr 3. Jeśli to poważna odpowiedź, proszę wyjaśnić, dlaczego to polecenie rozwiąże problem
Brad
Zredagowałem odpowiedź dla jasności: głównym pomysłem było po prostu umieszczenie identyfikatora skrytki między prostymi cytatami. Dotyczy to podpoleceń „zastosuj” lub „usuń”. Numer identyfikacyjny skrytki nie ma znaczenia
Adriano
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
DimaSan