stash @ {1} không rõ ràng?


122

Tôi đang cố lấy thông tin về kho lưu trữ của mình, nhưng git cho tôi biết điều đó stash@{0}stash@{1}rất mơ hồ. git stash listhoạt động tốt và .git/logs/refs/stashdường như có nội dung phù hợp (không phải tôi là chuyên gia về git internals).

% 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

Chỉ đơn giản là git stash showhoạt động tốt. Vậy tại sao những cái tên đặt git stash listcho tôi lại bị coi là mơ hồ?


1
Trong trường hợp của tôi, bằng cách nào đó, tôi đã kết thúc với một nhánh có tên stash, đang gây ra lỗi.
Zaz

Và trong trường hợp của tôi, tôi có một điều khiển từ xa được đặt tên stash, gây ra lỗi!
Robert Muil,

Câu trả lời:


231

Vỏ của bạn đang ăn dấu ngoặc nhọn của bạn, vì vậy trong khi bạn nói stash@{1}, git nhìn thấy stash@1và điều đó không có ý nghĩa gì. Trích dẫn đối số (sử dụng git stash apply "stash@{1}"hoặc git stash apply stash@"{1}"; trích dẫn một trong hai cách sẽ hoạt động) hoặc định cấu hình lại trình bao của bạn để chỉ mở rộng dấu ngoặc nhọn khi có dấu phẩy giữa chúng (zsh có thể được định cấu hình theo một trong hai cách, bash chỉ mở rộng dấu ngoặc nhọn bằng dấu phẩy hoặc phạm vi giữa chúng, khác shell có thể hoạt động theo cách này hoặc cách khác).


1
@sehe: Cái không phổ biến hiện đang sử dụng. Thông báo lỗi được trích dẫn chỉ ra nó khá rõ ràng (không, có vẻ như nó không thể bị bash).
Jan Hudec

83
Trên Windows, PowerShell cũng sẽ ăn dấu ngoặc. Bạn có thể thoát khỏi chúng bằng một (git stash drop stash@`{1`})
thanh chống lưng

8
Cảm ơn điều này xảy ra với Fish, không chắc chắn những gì đã xảy ra.
Elijah Lynn

3
@Sergey sử dụng stash @ `{0`} (dấu gạch ngược) hoặc 'stash @ {0}' (dấu ngoặc kép) cho PowerShell.
Hans

4
Ôi trời, hơn một năm sau và tôi quay lại việc này một lần nữa vì tôi đang gặp vấn đề. Chỉ cho thấy tôi hiếm khi sử dụng cái này. Sau đó, để xem tôi đã để lại một bình luận ở trên đủ chắc chắn, nói rằng nó xảy ra với Fish. Quá buồn cười.
Elijah Lynn

23

Xin chào, tôi đã có điều tương tự xảy ra với tôi. Cách dễ nhất để sửa nó là:

$ git stash apply stash@"{2}"

Tôi đang sử dụng một trình bao windows git.


2
Ngoài ragit stash apply "stash@{2}"
rsenna

1
Hoạt động cho powershell
rsenna

cùng git stash áp dụng "stash @ {2}" đã làm việc cho tôi, tôi nhận được thông báo "tùy chọn không xác định: -encodedCommand" khi cố gắng git stash stash thứ 3 của mình, tôi đang sử dụng mã studio trực quan có tích hợp powershell làm thiết bị đầu cuối.
Rajan Chauhan

1

Nếu bạn gặp lỗi này khi làm việc trong Emacs với Magit trên Windows (giống như tôi),
tôi hy vọng giải pháp nhanh này sẽ giúp bạn:

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

Điều này sẽ trích dẫn {}trong một tham số thứ 3 ("stash", "cmd", "stash@{0}")được điều hành bởimagit-run-git



1

Đơn giản chỉ cần đặt stash id giữa các dấu ngoặc kép đơn giản:

git stash apply 'stash@{1}'

3
Làm thế nào để trả lời câu hỏi này? Không có chỉ mục số 3 trong danh sách lưu trữ. Nếu đây là một câu trả lời nghiêm túc xin giải thích lý do tại sao lệnh này sẽ giải quyết vấn đề
Brad

Tôi đã chỉnh sửa câu trả lời của mình cho rõ ràng: ý tưởng chính là chỉ cần đặt stash id giữa các dấu ngoặc kép đơn giản. Nó áp dụng cho các lệnh con 'apply' hoặc 'drop'. Số id kho thực tế không quan trọng
Adriano

Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
DimaSan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.