ฉันแก้ไขการเปลี่ยนแปลงของฉัน ตอนนี้ฉันต้องการยกเลิกการติดตั้งเฉพาะบางไฟล์จากที่เก็บ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันแก้ไขการเปลี่ยนแปลงของฉัน ตอนนี้ฉันต้องการยกเลิกการติดตั้งเฉพาะบางไฟล์จากที่เก็บ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ตามที่กล่าวไว้ด้านล่างและรายละเอียดใน " ฉันจะแยกไฟล์เดียว (หรือเปลี่ยนแปลงไฟล์) จาก git stash ได้อย่างไร " คุณสามารถใช้การใช้งานgit checkout
หรือgit show
เพื่อกู้คืนไฟล์ที่ระบุ
git checkout stash@{0} -- <filename>
ที่ไม่ทับ filename
: ให้แน่ใจว่าคุณไม่ได้มีการปรับเปลี่ยนในท้องถิ่นหรือคุณอาจต้องการที่จะรวมไฟล์ stashed แทน
(ตามความเห็นโดยไจเมตรสำหรับเปลือกบางอย่างเช่น tcsh ที่คุณต้องการที่จะหลบหนีตัวอักษรพิเศษไวยากรณ์จะเป็น: git checkout 'stash@{0}' -- <filename>
)
หรือบันทึกไว้ภายใต้ชื่อไฟล์อื่น:
git show stash@{0}:<full filename> > <newfile>
(โปรดทราบว่านี่
<full filename>
คือชื่อพา ธ เต็มของไฟล์ที่สัมพันธ์กับไดเรกทอรีบนสุดของโครงการ (คิดว่า: สัมพันธ์กับstash@{0}
)
yucerแนะนำในความคิดเห็น :
หากคุณต้องการเลือกด้วยตนเองการเปลี่ยนแปลงที่คุณต้องการใช้จากไฟล์นั้น:
git difftool stash@{0}..HEAD -- <filename>
วิเวกเพิ่มในความคิดเห็น :
ดูเหมือนว่า "
git checkout stash@{0} -- <filename>
" จะเรียกคืนเวอร์ชันของไฟล์ตามเวลาที่มีการดำเนินการเก็บข้อมูลซึ่งจะไม่ใช้ (เพียง) การเปลี่ยนแปลงที่เก็บไว้สำหรับไฟล์นั้น
เมื่อต้องการทำหลัง:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(ตามที่แสดงความคิดเห็นโดยpeterflynnคุณอาจต้อง| git apply -p1
ในบางกรณีลบหนึ่ง ( p1
) นำเครื่องหมายทับจากเส้นทาง diff แบบดั้งเดิม)
ตามที่แสดงความคิดเห็น: "unstash" (git stash pop
) จากนั้น:
git add
)git stash --keep-index
จุดสุดท้ายคือสิ่งที่ช่วยให้คุณเก็บไฟล์ไว้ในขณะที่อื่น ๆ
มันแสดงให้เห็นใน " วิธีการซ่อนเพียงหนึ่งไฟล์จากหลายไฟล์ที่มีการเปลี่ยนแปลง "
git stash pop
เนื่องจากไฟล์ขัดแย้งกัน คำตอบของ Balamurugan A ได้ทำเพื่อฉันในกรณีนี้
unstash
หมายความว่าpop
ในกรณีส่วนใหญ่ดูเหมือนว่าฉันอาจจะในกรณีส่วนใหญ่นี้เพียงบางส่วนตอบคำถาม จากนั้นคุณจะลบชิ้นส่วนที่เลือกใช้ออกจากที่เก็บเพื่อหลีกเลี่ยงความขัดแย้งและ / หรือความสับสนในภายหลังเมื่อ popping การเปลี่ยนแปลงที่เหลืออยู่ได้อย่างไร
git checkout stash@{N} <File(s)/Folder(s) path>
เช่น. ในการกู้คืนเฉพาะไฟล์. / test.c และโฟลเดอร์. / รวมจากไฟล์ที่ถูกซ่อนครั้งล่าสุด
git checkout stash@{0} ./test.c ./include
-a
ธงในขณะที่สร้างที่เก็บของ
ฉันคิดว่าคำตอบของ VonC อาจเป็นสิ่งที่คุณต้องการ แต่นี่เป็นวิธีในการเลือก "git Apply" ที่เลือกได้:
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
สิ่งใดเลย
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
- backticks จำเป็นสำหรับ PS ที่จะไม่ตีความการจัดฟันเป็นพิเศษและsc
เป็นสิ่งที่จำเป็นเพราะ>
ผู้ให้บริการเริ่มต้นของ PS เป็นUTF-16 (จริง ๆ แล้วคือ UCS-2)ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ @Balamurugan คำตอบของ A ไม่ได้ประสบปัญหาเหล่านี้
รายการแรกหยุดทั้งหมด
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
จากนั้นแสดงไฟล์ที่อยู่ในที่เก็บ (ให้เลือกที่เก็บ 1):
git stash show 1 --name-only
//Hint: you can also write
//git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
จากนั้นใช้ไฟล์ที่คุณต้องการ:
git checkout stash@{1} -- <filename>
หรือทั้งโฟลเดอร์:
git checkout stash@{1} /errors
มันยังใช้งานได้โดยไม่--
แนะนำให้ใช้ ดูนี้โพสต์
นอกจากนี้ยังเป็นเรื่องปกติที่จะรับรู้เครื่องหมายยัติภังค์คู่เป็นสัญญาณที่จะหยุดการตีความตัวเลือกและปฏิบัติต่อข้อโต้แย้งดังต่อไปนี้อย่างแท้จริง
git stash pop
เกิดข้อผิดพลาดสำหรับไฟล์ที่ไม่ได้ติดตาม ขอบคุณ.
หากคุณgit stash pop
(โดยไม่มีข้อขัดแย้ง) มันจะลบที่เก็บข้อมูลออกหลังจากนำไปใช้ แต่ถ้าคุณgit stash apply
จะใช้โปรแกรมแก้ไขโดยไม่ลบออกจากรายการที่ซ่อน จากนั้นคุณสามารถย้อนกลับการเปลี่ยนแปลงที่ไม่ต้องการด้วยgit checkout -- files...
git stash pop
และมีข้อขัดแย้งคุณจะต้องแก้ไขด้วยตนเองและจะไม่ลบที่เก็บ
อีกวิธีหนึ่ง:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
หรือshow
จะเขียนทับไฟล์แทนการใช้การเปลี่ยนแปลง "อีกทางหนึ่ง" เป็นการพูดที่น้อยไป
path/to/file2
ตามที่คุณต้องการแตกต่างจากไฟล์เดียวกันในพื้นที่ทำงานของคุณ ออกจากเส้นทางที่สองทำงานได้ดีสำหรับฉัน - และฉันได้รับข้อความแสดงข้อผิดพลาดโดยใช้-R
ตัวเลือก ("ใช้ตัวแก้ไขในทางตรงกันข้าม" พยายามที่จะแก้ไขเวอร์ชันที่ถูกจัดเก็บ?!) git diff stash@{N}^! -- path/to/file | git apply -
ดังนั้นการทำงานลักษณะเหมือนรุ่นของฉัน
...| git apply -3 -
สำหรับผู้ใช้ Windows: การจัดฟันแบบหยิกมีความหมายพิเศษใน PowerShell คุณสามารถล้อมรอบด้วยคำพูดเดียวหรือหลบหนีด้วย backtick ตัวอย่างเช่น:
git checkout 'stash@{0}' YourFile
หากไม่มีคุณอาจได้รับข้อผิดพลาด:
Unknown switch 'e'