ฉันจะตรวจสอบเวอร์ชันหนึ่งของไฟล์ใน Git ได้อย่างไร


88

ฉันจะตรวจสอบเวอร์ชันหนึ่งของไฟล์ใน git ได้อย่างไร

ฉันพบเมลนี้ในรายชื่อส่งเมลซึ่งระบุว่า:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

แต่ฉันไม่เข้าใจวิธีค้นหา 'HEAD ~ 43' ถ้าฉันทำ a ฉันจะgit log aFileรู้ได้อย่างไรว่า 'HEAD ~ 43' ใดที่ฉันควรใช้

แล้วทำไมต้องเรียกใช้git resetไฟล์นั้น มันทำอะไร?


"git reset <commit> <file>" จะเหมือนกับ "git checkout <commit> <file>"
Jakub Narębski

2
หากคำถามของคุณเกี่ยวกับไวยากรณ์ HEAD ~ 43 (เอกสารใน git-rev-parse) ให้ถามเกี่ยวกับปัญหานี้ไม่ใช่เรื่องที่ไม่เกี่ยวข้องที่คุณรู้คำตอบ "HEAD ~ 45 หมายถึงอะไรและวิธีค้นหาไฟล์เวอร์ชันเฉพาะ"
Jakub Narębski

อ้างอิงจากlt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/…และlt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" ไม่เหมือนกับ "git checkout <commit> <file>": "git reset <commit> <file>" reverts <file> ในดัชนี จาก <commit> โดยไม่ต้องแตะ <file> ในแผนผังการทำงาน แต่ "git checkout <commit> <file>" จะอัปเดตดัชนีสำหรับ <file> จาก <commit> จากนั้นอัปเดต <file> ในแผนผังการทำงาน
yoda

2
หากคำตอบใด ๆ ด้านล่างตอบคำถามของคุณวิธีการทำงานของ Stack Overflow คุณจะ "ยอมรับ" คำตอบโดยคลิกเครื่องหมายถูกที่อยู่ข้างๆ รายละเอียดที่นี่ แต่ถ้าคำถามของคุณได้รับคำตอบเท่านั้น หากไม่เป็นเช่นนั้นให้พิจารณาเพิ่มรายละเอียดให้กับคำถามและ / หรือความคิดเห็นเกี่ยวกับคำตอบที่บอกว่าสิ่งที่ยังไม่ชัดเจน (ยัง)
TJ Crowder

คำตอบ:


106

คุณรู้ว่าสิ่งที่กระทำ (เช่นการแก้ไขเฉพาะ) เป็นของไฟล์? จากนั้นทำ:

git checkout <commit> <file>

คำสั่งอื่น ๆ :

git checkout HEAD~N <file>

มีไว้สำหรับเมื่อคุณต้องการรับเวอร์ชันของไฟล์จากช่วงกลับ (ซึ่งฉันทำเพื่อความคิดถึง)


19

HEAD~43เป็นเพียงต้นไม้ดังนั้นคุณสามารถใช้แฮชหรือแท็ก คุณต้องแยกต้นไม้ออกจากชื่อไฟล์ด้วย--มิฉะนั้นจะถือว่าเป็นชื่อไฟล์ ตัวอย่างเช่น.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43หมายถึงการกระทำ (เวอร์ชัน) ของไฟล์ แต่คุณสามารถใช้คอมมิตแฮชที่ได้รับจากการทำgit logในไฟล์ หากคุณต้องการเพียงแค่ไฟล์คุณไม่จำเป็นต้องเรียกใช้git resetไฟล์นั้น จำเป็นเฉพาะในกรณีที่คุณต้องการส่งต่อไฟล์ไปยัง HEAD ปัจจุบัน

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