ฉันได้ลบไฟล์ด้วย Git และทำการคอมมิตแล้วดังนั้นไฟล์จึงไม่อยู่ในสำเนาที่ใช้งานได้อีกต่อไป ฉันต้องการดูเนื้อหาของไฟล์นั้น แต่ไม่สามารถกู้คืนได้จริง ฉันจะทำเช่นนี้ได้อย่างไร?
ฉันได้ลบไฟล์ด้วย Git และทำการคอมมิตแล้วดังนั้นไฟล์จึงไม่อยู่ในสำเนาที่ใช้งานได้อีกต่อไป ฉันต้องการดูเนื้อหาของไฟล์นั้น แต่ไม่สามารถกู้คืนได้จริง ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
git show HEAD^:path/to/file
คุณสามารถใช้ตัวระบุการคอมมิตแบบชัดแจ้งหรือHEAD~nเพื่อดูเวอร์ชันที่เก่ากว่าหรือหากมีการคอมมิตมากกว่าหนึ่งรายการนับตั้งแต่ที่คุณลบไป
fatal: Invalid object name 'HEAD^'.(ฉันต้องพูดถึงว่าฉันมีเพียง "การกระทำเริ่มต้น")
หากนี่คือไฟล์ที่คุณได้ลบไปแล้วและไม่ต้องการหาการแก้ไขคุณสามารถใช้ (ไฟล์มีชื่อfooในตัวอย่างนี้คุณสามารถใช้เส้นทางแบบเต็มได้):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
rev-listภาวนารูปลักษณ์สำหรับทุกการแก้ไขของfooแต่รายชื่อเพียงคนเดียว ตั้งแต่rev-listรายการในลำดับย้อนกลับแล้วสิ่งที่มันจะแสดงรายการคือการแก้ไขที่ผ่านมาที่มีการเปลี่ยนแปลงซึ่งจะเป็นกระทำที่ถูกลบfoo foo(นี่เป็นไปตามสมมติฐานที่ว่า git ไม่อนุญาตให้มีการเปลี่ยนแปลงไฟล์ที่ถูกลบและยังคงถูกลบอยู่ ) คุณไม่สามารถใช้การแก้ไขที่rev-listส่งคืนตามที่เป็นอยู่ได้เนื่องจากfooไม่มีอยู่แล้ว คุณต้องขอไฟล์ก่อนหน้าซึ่งมีการแก้ไขล่าสุดของไฟล์ดังนั้น^ในgit showไฟล์.
**/fooหากคุณไม่ทราบเส้นทาง (สิ่งนี้จะใช้ได้กับคำสั่ง rev-list แต่ไม่ใช่คำสั่ง show อย่างไรก็ตามด้วยการกระทำจากคำสั่ง rev-list คุณจะสามารถค้นหาเส้นทางได้)
เนื่องจากคุณอาจจำเส้นทางที่แน่นอนไม่ได้คุณสามารถรับ sha1 จากบันทึกคอมไพล์แทนจากนั้นคุณสามารถออกได้
git cat-file -p <sha1>
git whatchanged --no-abbrevที่ให้เอาต์พุตคล้ายกับบันทึก git (หรือ svn)
path/to/fileเป็นเส้นทางแบบเต็มจากด้านบนสุดของโครงการ (dir ด้านบนของที่เก็บ)