บังคับให้ซ่อนคอมไพล์เพื่อเขียนทับไฟล์ที่เพิ่มเข้ามา


223

ฉันมีไฟล์บางไฟล์ที่ไม่ได้ติดตามในคอมไพล์ ฉันทำการเปลี่ยนแปลงบางอย่างและต้องการที่จะส่งมอบสิ่งเหล่านี้ แต่ฉันรู้ว่าฉันลืมตรวจสอบไฟล์ที่ไม่ได้แก้ไขก่อน ดังนั้นฉันจึง stashed ไฟล์แล้วเพิ่มรุ่นที่ไม่แก้ไข

จากนั้นเมื่อฉันใช้ stash กับที่เก็บฉันได้รับความขัดแย้งเนื่องจากไฟล์ที่ถูกเพิ่มไปแล้ว

ฉันจะนำ stash ไปใช้และบังคับให้รุ่นต่างๆใน stash นั้นถูกใช้ในการกำหนดค่าตามความชอบของต้นฉบับในที่เก็บได้อย่างไร

ขอบคุณ


7
วิธีการแก้ปัญหาที่น่าเกลียดจนใครสักคนขึ้นมาด้วยหนึ่งที่ดีกว่า: ลบไฟล์ใหม่โดยใช้ก่อนที่จะทำgit rm git stash apply
ทอม

จะไม่สูญเสียประวัติศาสตร์หรือไม่ เหตุผลในการเพิ่มเวอร์ชันที่ไม่ได้แก้ไขคือเพื่อเก็บประวัติ
สเตฟาน

1
ไม่มันจะไม่สูญเสียประวัติศาสตร์ หากคุณลบไฟล์ให้เพิ่มกลับด้วยการดัดแปลงเล็กน้อยจากนั้นคอมมิทgitจะถือว่าไฟล์นั้นเป็นเพียงการดัดแปลงเล็กน้อย
Tom

คำตอบ:


365

ใช้git checkoutแทนgit stash apply:

$ git checkout stash -- .
$ git commit

การดำเนินการนี้จะกู้คืนไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันเป็นเวอร์ชันที่ถูกจัดเก็บ


หากมีการเปลี่ยนแปลงไฟล์อื่น ๆ ในไดเร็กทอรีการทำงานที่ควรเก็บไว้นี่เป็นทางเลือกที่ใช้มือน้อยกว่า:

$ git merge --squash --strategy-option=theirs stash

หากมีการเปลี่ยนแปลงในดัชนีหรือการผสานจะสัมผัสไฟล์ที่มีการเปลี่ยนแปลงในท้องถิ่น git จะปฏิเสธที่จะผสาน ไฟล์ส่วนบุคคลสามารถตรวจสอบได้จากที่เก็บโดยใช้

$ git checkout stash -- <paths...>

หรือโต้ตอบกับ

$ git checkout -p stash

สิ่งเหล่านี้ไม่สามารถใช้งานได้ในกรณีที่ฉันใช้งาน ข้อค้นพบและทางออกของฉันอยู่ที่นี่stackoverflow.com/a/26685296/496046 - สิ่งนี้ควรแก้ไขสถานการณ์ของคุณด้วย @AlexanderBird
tremby

2
git checkout stash -- .คำสั่งนี้ไม่ได้ทำอะไรเลยเมื่อฉันวิ่ง
Rotsiser Mho

3
@RotsiserMho Git ไม่ค่อยดีเกี่ยวกับการให้ข้อความยืนยัน คุณแน่ใจหรือว่าไม่ได้ทำอะไรเลย ทำงานได้ดีสำหรับฉัน
สินใจ

5
ฉันต้องเรียกใช้git checkout stash -- .ในโฟลเดอร์พาเรนต์สูงสุดที่มีการเปลี่ยนแปลงของฉันมิฉะนั้นจะใช้การเปลี่ยนแปลงกับโฟลเดอร์ที่ฉันรันคำสั่งเท่านั้น
Leo

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

13

git stash show -p | git apply

แล้วgit stash dropถ้าคุณต้องการที่จะวางรายการที่เก็บไว้


2
หมายเหตุ: คุณควรจะอยู่ในรากของพื้นที่เก็บข้อมูลสำหรับการทำงานอย่างถูกต้องมิฉะนั้นคุณจะได้รับนี้
Ruslan

@PengheGeng อย่างที่คุณเห็นฉันตอบประมาณหนึ่งปีก่อน NetEmmanuel
Hasan TBT

@ Ruslan ฉันได้รับในขณะที่ในรากของ repo ของฉัน🤔
Leo


1

TL; DR:

git checkout HEAD path/to/file
git stash apply

รุ่นยาว:

คุณได้รับข้อผิดพลาดนี้เนื่องจากการเปลี่ยนแปลงที่คุณไม่ต้องการเขียนทับ git checkout HEADยกเลิกการเปลี่ยนแปลงเหล่านี้ด้วย git checkout HEAD path/to/fileคุณสามารถยกเลิกการเปลี่ยนแปลงไปยังไฟล์ที่เฉพาะเจาะจงกับ หลังจากลบสาเหตุของความขัดแย้งคุณสามารถสมัครได้ตามปกติ

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