วิธีเปลี่ยนโฟลเดอร์กลับเป็นการคอมมิตเฉพาะโดยการสร้างแพตช์


99

นี่คือประวัติของฉันสำหรับโฟลเดอร์ 'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

ฉันต้องการเปลี่ยนโฟลเดอร์บางโฟลเดอร์กลับไปเป็นคอมมิต 'แก้ไขบั๊กในบางโฟลเดอร์ "

เนื่องจากการคอมมิตครั้งที่สองเกี่ยวข้องกับการเปลี่ยนแปลงภายนอกบางโฟลเดอร์ฉันจึงไม่ต้องการเปลี่ยนกลับคอมมิตนี้

ฉันเดาว่าวิธีที่ปลอดภัยที่สุดคือการสร้าง diff / patch ระหว่างการกระทำ e095 และ 89cd ที่ใช้กับบางโฟลเดอร์จากนั้นใช้โปรแกรมแก้ไขนั้น ฉันจะทำเช่นนั้นได้อย่างไร?

คำตอบ:


162

คุณสามารถใช้git checkoutเพื่ออัพเดตที่เก็บของคุณเป็นสถานะเฉพาะ

git checkout e095 -- somefolder

สำหรับคำถามของคุณเกี่ยวกับการสร้างความแตกต่างนั้นก็ใช้ได้เช่นกัน เพียงสร้างความแตกต่างเพื่อเปลี่ยนจากสถานะปัจจุบันของคุณกลับไปที่e095:

git diff 89cd..e095 -- somefolder

31
สิ่งนี้ไม่ได้ลบไฟล์ที่เพิ่มในคอมมิตนั้นให้ใช้git reset e095 -- some/folderแทน
shime

3
จาก git 2.22 คุณสามารถใช้--no-overlayเพื่อgit checkoutให้ไฟล์ที่ติดตามที่ไม่ได้อยู่ในคอมมิตที่คุณกำลังเช็คเอาต์จะถูกลบออก
Mariusz Pawelski

56

คุณสามารถใช้git resetเพื่อรีเซ็ตดัชนีซึ่งจะรวมถึงการลบไฟล์ที่เพิ่มในคอมมิตล่าสุด ( git checkoutด้วยตัวเองไม่ได้ทำสิ่งนี้):

git reset e095 -- somefolder

อย่างไรก็ตามgit resetไม่ได้อัปเดตสำเนาที่ใช้งานได้และ--hardตัวเลือกนี้ใช้ไม่ได้กับโฟลเดอร์ จากนั้นใช้git checkoutเพื่อสร้างสำเนาการทำงานเหมือนกับดัชนี:

git checkout -- somefolder

จากนั้นหากคุณต้องการลบไฟล์ใด ๆ ที่เพิ่มเข้ามาคุณต้องทำ:

git clean -fd somefolder

คำตอบนี้ใช้ได้กับฉันเมื่อไดเร็กทอรีมีไฟล์ใหม่
Yahoho

2
คำตอบนี้จะดีกว่ามากถ้าคุณต้องการสแนปชอตที่เก็บข้อมูลทั้งหมดในเวลานั้นจริงๆ
data princess

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