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?


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


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.


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



1

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

git stash apply 'stash@{1}'

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.