วิธีการ Git สะสมป๊อปสะสมเฉพาะใน 1.8.3?


290

ฉันเพิ่งอัพเกรด Git ฉันใช้ Git เวอร์ชั่น 1.8.3

เช้านี้ฉันพยายามที่จะปลดการเปลี่ยนแปลง 1 ในสแต็กลึก

ฉันวิ่งgit stash pop stash@{1}และได้รับข้อผิดพลาดนี้

ร้ายแรง: อาร์กิวเมนต์ที่คลุมเครือ 'stash @ 1': การแก้ไขที่ไม่รู้จักหรือเส้นทางที่ไม่ได้อยู่ในแผนผังการทำงาน ใช้ '-' เพื่อแยกเส้นทางจากการแก้ไขเช่นนี้: 'git [... ] - [... ]'

ฉันได้ลองใช้รูปแบบนี้มากกว่า 20 รูปแบบรวมถึงใช้applyแทนpopโดยไม่ประสบความสำเร็จ มีอะไรเปลี่ยนแปลงบ้าง? ใครบ้างที่พบสิ่งนี้


2
คุณลองหลบหนี {} หรือไม่?
AlexDev

20
ด้วย Git 2.11 (Q4 2016) ตอนนี้คุณสามารถใช้งานได้git stash pop 1: ดูคำตอบของฉันด้านล่าง
VonC

คำตอบ:


360
git stash apply n

ทำงานเหมือนของ git เวอร์ชั่น 2.11

คำตอบเดิมอาจช่วยแก้ปัญหาเกี่ยวกับไวยากรณ์เก่าที่เกี่ยวข้องกับการหลบหนีของเชลล์:

ตามที่อธิบายไว้ก่อนหน้านี้เครื่องมือจัดฟันแบบหยิกอาจต้องหลบหนีหรืออ้างอิงโดยขึ้นอยู่กับระบบปฏิบัติการเชลล์และอื่น ๆ

ดู " stash @ {1} คลุมเครือ? " สำหรับคำแนะนำโดยละเอียดเกี่ยวกับสิ่งที่อาจจะผิดพลาดและวิธีแก้ไขในเชลล์และแพลตฟอร์มต่าง ๆ

git stash list
git stash apply stash@{n}

git stash ใช้เวอร์ชัน


15
ฉันเพียงคนเดียวที่มีคำตอบนี้คือคำถามถามว่าจะpopซ่อนเฉพาะได้อย่างไรและคำสั่งนี้เป็นคำสั่งapplyแทนที่จะซ่อนไว้ ความแตกต่างที่ป๊อปทั้งสองนำไปใช้กับรหัสและลบตัวมันเอง
Grant Humphries

ไม่ทำงานสำหรับฉัน ได้รับข้อผิดพลาด "ตัวเลือกที่ไม่รู้จัก: -encodedCommand"
Yuvraj Patil


โปรดอัปเดตคำตอบของคุณทันทีgit stash apply n
Hafiz Temuri


78

หากคุณต้องการให้แน่ใจว่าจะไม่ต้องจัดการกับคำพูดสำหรับไวยากรณ์stash@{x}ใช้ Git 2.11 (Q4 2016)

ดูกระทำ a56c8f5 (24 ตุลาคม 2016) โดยแอรอนเอ็มวัตสัน (watsona4 )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 9fa1f90 , 31 Oct 2016)

stash: อนุญาตให้ stashes ถูกอ้างอิงโดยดัชนีเท่านั้น

แทนที่จะอ้างอิง " stash@{n}" อย่างชัดเจนทำให้เป็นไปได้เพียงอ้างอิงว่า " n"
ผู้ใช้ส่วนใหญ่อ้างอิงเฉพาะการซ่อนตามตำแหน่งของพวกเขาในสแต็คสแต็ค (สิ่งที่ฉันอ้างถึงเป็น "ดัชนี" ที่นี่)

ไวยากรณ์สำหรับการสะสมทั่วไป ( stash@{n}) น่ารำคาญเล็กน้อยและง่ายต่อการลืมและบางครั้งก็ยากที่จะหลบหนีอย่างถูกต้องในสคริปต์และบางครั้งก็ยากที่จะหลบหนีออกมาได้อย่างถูกต้องในสคริปต์

ด้วยเหตุนี้ความสามารถในการทำสิ่งต่าง ๆ ด้วยการสะสมโดยเพียงแค่อ้างอิงดัชนีเป็นที่ต้องการ

ดังนั้น:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1

5
ขอบคุณ! นี่อาจเป็นคำตอบที่เกี่ยวข้องมากที่สุดสำหรับทุกคนที่มาที่นี่ในปี 2019
Aaron Frary

52

บน Windows Powershell ฉันเรียกใช้สิ่งนี้:

git stash apply "stash@{1}"

2
ทำงานบน Ubuntu Linux เช่นกัน
Bouke Versteegh

ยังใช้งานได้กับ Mac OS X ฉันชอบสิ่งนี้ดีกว่าการหลบหนีอักขระเดี่ยว
Félix Gagnon-Grenier

16

ดังที่โรเบิร์ตชี้ให้เห็นเครื่องหมายคำพูดอาจเป็นเคล็ดลับสำหรับคุณ:

git stash pop stash@"{1}"

12

หากไม่มีการทำงานใด ๆ ข้างต้นเครื่องหมายอัญประกาศรอบตัวสะสมอาจทำงานให้คุณ

git stash pop "stash@{0}"

4

ฉันติดตั้ง 2.22 แล้วและใช้งานได้ ..

git stash pop --index 1

ไม่ทำงาน .. $ git stash pop - ดัชนีที่ 1 ร้ายแรง: อาร์กิวเมนต์ที่คลุมเครือ '1': การแก้ไขที่ไม่รู้จักหรือเส้นทางที่ไม่ได้อยู่ในแผนผังการทำงาน ใช้ '-' เพื่อแยกเส้นทางจากการแก้ไขเช่นนี้: 'git <command> [<revision> ... ] - [<file> ... ]'
Dave Doga Oz


1

ตรวจสอบรายการก่อน: -

git stash list

คัดลอกดัชนีที่คุณต้องการให้ปรากฏจากรายการที่ซ่อน

git stash pop stash@{index_number}

เช่น.:

git stash pop stash@{1}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.