stash @ {1} คลุมเครือ?


122

ฉันกำลังพยายามหาข้อมูลเกี่ยวกับที่ซ่อนของฉัน แต่คอมไพล์กำลังบอกฉันstash@{0}และstash@{1}มีความคลุมเครือ git stash listใช้งานได้ดีและ.git/logs/refs/stashดูเหมือนว่าจะมีเนื้อหาที่เหมาะสม (ไม่ใช่ว่าฉันเป็นผู้เชี่ยวชาญด้านคอมไพล์ภายใน)

% 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

เพียงแค่ใช้git stash showงานได้ดี ทำไมชื่อที่git stash listทำให้ฉันถูกมองว่าคลุมเครือ?


1
ในกรณีของฉันฉันลงเอยด้วยชื่อสาขาstashซึ่งทำให้เกิดข้อผิดพลาด
Zaz

และในกรณีของฉันฉันมีชื่อรีโมทstashทำให้เกิดข้อผิดพลาด!
Robert Muil

คำตอบ:


231

เปลือกของคุณกินวงเล็บปีกกาของคุณดังนั้นในขณะที่คุณพูดว่าstash@{1}คอมไพล์เห็นstash@1และนั่นก็ไม่สมเหตุสมผล อ้างถึงอาร์กิวเมนต์ (ใช้git stash apply "stash@{1}"หรือgit stash apply stash@"{1}"; การอ้างถึงวิธีใดวิธีหนึ่งจะได้ผล) หรือกำหนดค่าเชลล์ของคุณใหม่เพื่อขยายวงเล็บปีกกาเฉพาะเมื่อมีเครื่องหมายจุลภาคอยู่ระหว่างพวกเขา (zsh สามารถกำหนดค่าได้ไม่ว่าจะด้วยวิธีใดก็ตาม bash จะขยายวงเล็บปีกกาด้วยลูกน้ำหรือช่วงระหว่างเท่านั้น เปลือกหอยอาจมีพฤติกรรมอย่างใดอย่างหนึ่ง)


1
@sehe: สิ่งที่ผิดปกติในปัจจุบันใช้ ข้อความแสดงข้อผิดพลาดที่ยกมาระบุไว้ค่อนข้างชัดเจน (ไม่ดูเหมือนว่าจะทุบตีไม่ได้)
ม.ค. Hudec

83
บน Windows PowerShell จะกินวงเล็บด้วย คุณสามารถหนีพวกเขาได้ด้วยการตีกลับ(git stash drop stash@`{1`})
Xavier Poinas

8
ขอบคุณที่สิ่งนี้เกิดขึ้นกับ Fish ไม่แน่ใจว่าเกิดอะไรขึ้น
Elijah Lynn

3
@Sergey ใช้ stash @ `{0`} (backticks) หรือ" stash @ {0} "(single quotes) สำหรับ PowerShell
Hans

4
โอ้ปีต่อมาฉันกลับมาที่นี่อีกครั้งเพราะฉันมีปัญหา แสดงให้เห็นว่าฉันไม่ค่อยใช้สิ่งนี้ จากนั้นจะเห็นว่าฉันแสดงความคิดเห็นไว้ข้างบนนั้นนั่นเองบอกว่ามันเกิดขึ้นกับ Fish สนุกมาก.
Elijah Lynn

23

สวัสดีฉันมีสิ่งเดียวกันเกิดขึ้นกับฉัน วิธีที่ง่ายที่สุดในการแก้ไขคือ:

$ git stash apply stash@"{2}"

ฉันใช้ windows git shell


2
ด้วยgit stash apply "stash@{2}"
rsenna

1
ใช้ได้กับ powershell
rsenna

git stash เดียวกันใช้ "stash @ {2}" ได้ผลสำหรับฉันฉันได้รับข้อความ "Unknown option: -encodedCommand" เมื่อพยายามคอมไพล์ stash stash ที่ 3 ของฉันฉันใช้รหัส visual studio ซึ่งมีการรวม powershell เป็นเทอร์มินัล
Rajan Chauhan

1

หากคุณมีข้อผิดพลาดนี้ขณะทำงานใน Emacs กับ Magit บน Windows (เช่นฉัน)
ฉันหวังว่าวิธีแก้ปัญหาอย่างรวดเร็วนี้จะช่วยคุณได้:

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

สิ่งนี้จะอ้างอิง{}ในพารามิเตอร์ที่ 3 ("stash", "cmd", "stash@{0}")ซึ่งเรียกใช้โดยmagit-run-git



1

เพียงแค่ใส่รหัสซ่อนระหว่างคำพูดง่ายๆ:

git stash apply 'stash@{1}'

3
สิ่งนี้ตอบคำถามอย่างไร ไม่มีดัชนี # 3 ในรายการที่ซ่อน หากนี่เป็นคำตอบที่จริงจังโปรดอธิบายว่าเหตุใดคำสั่งนี้จึงแก้ปัญหาได้
Brad

ฉันแก้ไขคำตอบเพื่อความชัดเจน: แนวคิดหลักคือเพียงแค่ใส่รหัสที่ซ่อนไว้ระหว่างเครื่องหมายคำพูดธรรมดา ใช้กับคำสั่งย่อย "ใช้" หรือ "ปล่อย" หมายเลขรหัสที่ซ่อนไม่สำคัญจริงๆ
Adriano

แม้ว่าข้อมูลโค้ดนี้จะช่วยแก้ปัญหาได้ แต่คำอธิบายจะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้มาก โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและบุคคลเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำโค้ดของคุณ
DimaSan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.