ฉันมีความมุ่งมั่นเก่าที่ฉันทำไม่กี่สัปดาห์ที่ผ่านมา ฉันต้องการกู้คืนไฟล์เดียวจากการส่ง ฉันจะทำอย่างไร
ฉันมีความมุ่งมั่นเก่าที่ฉันทำไม่กี่สัปดาห์ที่ผ่านมา ฉันต้องการกู้คืนไฟล์เดียวจากการส่ง ฉันจะทำอย่างไร
คำตอบ:
git checkout 'master@{7 days ago}' -- path/to/file.txt
สิ่งนี้จะไม่เปลี่ยน HEAD แต่จะเขียนทับไฟล์ในเครื่อง path/to/file.txt
ดูman git-rev-parseเพื่อดูรายละเอียดการแก้ไขที่เป็นไปได้ที่นั่น (แน่นอนว่าแฮชธรรมดา (เช่นdd9bacb) จะทำอย่างดี)
อย่าลืมทำการเปลี่ยนแปลง (หลังจากตรวจทาน ... )
revision-specificationนับว่าเป็นสิ่งที่ OP ถาม :)
                    shacommit~1(เช่น:) git checkout 0f4bbdcd~1 -- path/to/file.txtเพื่อรับการกระทำทันทีก่อน
                    git checkout [Revision_Key] -- path/to/fileตรวจสอบไฟล์จากเครื่องเก่าของคุณกระทำผ่านทางgit checkoutสามารถจัดการไฟล์เดียว (ดูคำตอบโดย sehe) ไม่จำเป็นต้องคัดลอกและวาง
                    HEAD, ORIG_HEADหรือใด ๆ ของผู้ใช้ร่วมกับ^/ ~/ @สไตล์สัญกรณ์
                    ฉันต้องการกู้คืนไฟล์ล่าสุดที่คอมมิทเข้าไปในคอมไพล์ ดังนั้นเพื่อที่จะย้ำและให้มุมมองอื่นคุณต้องทำสิ่งนี้โดยใช้สองขั้นตอนต่อไปนี้:
git log -3
 
สิ่งนี้แสดงการกระทำล่าสุดสามรายการ อ่านความคิดเห็นและชื่อผู้แต่งเพื่อที่คุณจะได้ จำกัด รุ่นที่คุณต้องการ จดบันทึกรหัสการส่งข้อมูลแบบยาวนั้น ๆ (เช่น b6b94f2c19c456336d60b9409fb1e373036d3d71) สำหรับเวอร์ชันการส่งที่คุณต้องการ
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
 
ส่งรหัสยืนยันและชื่อไฟล์ที่คุณต้องการกู้คืน ตรวจสอบให้แน่ใจว่าคุณมีช่องว่างก่อนและหลังเครื่องหมายขีดคั่นคู่
มีหลายวิธีที่จะทำ แต่อันนี้ง่ายกว่าที่ฉันจำได้ หวังว่าจะช่วย
หมายเหตุ:หากคุณอยู่ในพา ธ / โฟลเดอร์โปรเจ็กต์คุณไม่จำเป็นต้องพิมพ์พา ธ ของไฟล์แบบเต็มในคำสั่งเช็คเอาต์
git checkout <tree-ish> -- <pathspec>พูดถึงคำตอบทั้งหมด ในฐานะของ git v2.23.0 มีวิธีการกู้คืนคอมไพล์ใหม่ซึ่งควรถือว่าเป็นส่วนหนึ่งของสิ่งที่git checkoutรับผิดชอบ ดูไฮไลท์ของการเปลี่ยนแปลงในบล็อก GitHub
พฤติกรรมเริ่มต้นของคำสั่งนี้คือการคืนค่าสถานะของแผนภูมิการทำงานที่มีเนื้อหามาจากsourceพารามิเตอร์ (ซึ่งในกรณีของคุณจะเป็นแฮชการกระทำ)
สมมติว่าแฮชการคอมมิชชันเป็นabcdefคำสั่งจะมีลักษณะดังนี้:
git restore --source=abcdef file_name
ซึ่ง (โดยค่าเริ่มต้น) วางไว้ในแผนผังการทำงาน หากคุณต้องการที่จะนำการเปลี่ยนแปลงในดัชนีโดยตรงเพื่อให้สามารถกระทำได้ทันที:
git restore --source=abcdef --worktree --staged file_name
หรือชื่อตัวเลือกสั้น ๆ :
git restore -s=abcdef -W -S file_name