ฉันมีความมุ่งมั่นเก่าที่ฉันทำไม่กี่สัปดาห์ที่ผ่านมา ฉันต้องการกู้คืนไฟล์เดียวจากการส่ง ฉันจะทำอย่างไร
ฉันมีความมุ่งมั่นเก่าที่ฉันทำไม่กี่สัปดาห์ที่ผ่านมา ฉันต้องการกู้คืนไฟล์เดียวจากการส่ง ฉันจะทำอย่างไร
คำตอบ:
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