stash @ {1} ambigu?

122

Saya mencoba mendapatkan info tentang simpanan saya, tetapi git memberi tahu saya itu stash@{0}dan stash@{1}tidak jelas. git stash listberfungsi dengan baik, dan .git/logs/refs/stashtampaknya memiliki konten yang sesuai (bukan karena saya ahli dalam git internal).

% 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

Biasa git stash showsaja berfungsi dengan baik. Jadi mengapa nama yang git stash listmemberi saya dianggap ambigu?

Luar biasa
sumber
1
Dalam kasus saya, saya entah bagaimana berakhir dengan cabang bernama stash, yang menyebabkan kesalahan.
Zaz
Dan dalam kasus saya, saya memiliki remote bernama stash, menyebabkan kesalahan!
Robert Muil

Jawaban:

231

Kulit Anda memakan tanda kurung keriting Anda, jadi saat Anda berkata stash@{1}, git melihat stash@1dan itu tidak masuk akal. Kutip argumen (gunakan git stash apply "stash@{1}"atau git stash apply stash@"{1}"; mengutip salah satu cara akan berfungsi) atau konfigurasi ulang shell Anda untuk hanya memperluas tanda kurung kurawal ketika ada koma di antara mereka (zsh dapat dikonfigurasi dengan cara apa pun, bash hanya memperluas tanda kurung kurawal dengan koma atau rentang di antara mereka, lainnya kerang mungkin berperilaku satu atau lain cara).

Jan Hudec
sumber
1
@sehe: Yang saat ini Uncommon gunakan. Pesan kesalahan yang dikutip menunjukkannya dengan cukup jelas (tidak, sepertinya itu tidak bisa menjadi pesta).
Jan Hudec
83
Di Windows, PowerShell juga akan memakan tanda kurung. Anda dapat menghindarinya dengan backtick(git stash drop stash@`{1`})
Xavier Poinas
8
Terima kasih ini terjadi dengan Fish, tidak yakin apa yang terjadi.
Elijah Lynn
3
@Sergey menggunakan simpanan @ `{0`} (tanda kutip) atau 'simpanan @ {0}' (tanda kutip tunggal) untuk PowerShell.
Hans
4
Ya ampun, lebih dari setahun kemudian dan saya kembali ke ini lagi karena saya mengalami masalah. Hanya menunjukkan betapa jarang saya menggunakan ini. Kemudian untuk melihat saya meninggalkan komentar di atas yang cukup meyakinkan, mengatakan itu terjadi dengan Fish. Terlalu lucu.
Elijah Lynn
23

Halo, saya mengalami hal yang sama pada saya. Cara termudah untuk memperbaikinya adalah:

$ git stash apply stash@"{2}"

Saya menggunakan windows git shell.

df
sumber
2
Jugagit stash apply "stash@{2}"
rsenna
1
Bekerja untuk
Powershell
git simpanan yang sama berlaku "stash @ {2}" berfungsi untuk saya, saya mendapatkan pesan "opsi tidak diketahui: -encodedCommand" saat mencoba git menyimpan simpanan ketiga saya, saya menggunakan kode studio visual yang memiliki integrasi PowerShell sebagai terminalnya.
Rajan Chauhan
1

Jika Anda mengalami kesalahan ini saat bekerja di Emacs dengan Magit di Windows (seperti saya),
saya harap solusi cepat ini akan membantu Anda:

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

Ini akan mengutip {}dalam parameter ke-3 ("stash", "cmd", "stash@{0}")yang dijalankan olehmagit-run-git

Sergey
sumber
1

Untuk pengguna zsh:

$ git stash apply stash@'{'1'}'
pengguna3251328
sumber
1

Cukup letakkan id simpanan di antara kutipan sederhana:

git stash apply 'stash@{1}'
Adriano
sumber
3
Bagaimana ini menjawab pertanyaan? Tidak ada indeks # 3 dalam daftar simpanan. Jika ini adalah jawaban yang serius, jelaskan mengapa perintah ini akan menyelesaikan masalah
Brad
Saya mengedit jawaban saya untuk kejelasan: ide utamanya adalah menempatkan id simpanan di antara kutipan sederhana. Ini berlaku untuk subperintah 'terapkan' atau 'lepaskan'. Nomor id simpanan sebenarnya tidak penting
Adriano
Meskipun cuplikan kode ini dapat menyelesaikan pertanyaan, menyertakan penjelasan sangat membantu meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa mendatang, dan orang-orang itu mungkin tidak tahu alasan saran kode Anda.
DimaSan