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.