Git Reflog และการกู้คืนประวัติ
เรียนรู้ `git reflog` เพื่อกู้คืนคอมมิตหรือสาขาที่สูญหาย ช่วยเป็นตาข่ายนิรภัยสำหรับงานของคุณ
Git Reflog และการกู้คืนประวัติ เป็นบทเรียน Git & GitHub Professional Workflow ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Git & GitHub Professional Workflow และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Git & GitHub Professional Workflow มีบทเรียนทั้งหมด 4 บทเรียน
Git Reflog คืออะไร
เคยลบสาขาหรือรีเซ็ตไปยังคอมมิตที่ไม่ถูกต้องโดยไม่ตั้งใจไหมครับ ไม่ต้องตกใจ! Git มีตาข่ายนิรภัยอันทรงพลังที่เรียกว่า Reflog
รีฟล็อก (บันทึกการอ้างอิง) คือบันทึกตำแหน่งที่ HEAD และตัวชี้สาขาเคยอยู่ในคลัง ภายในเครื่องของคุณ
รีฟล็อกติดตามประวัติอย่างไร
ต่างจากประวัติคอมมิต (git log) ที่ติดตามการเปลี่ยนแปลงในไฟล์โครงการของคุณ รีฟล็อกจะติดตามการเปลี่ยนแปลงของการอ้างอิงในคลังของคุณ
ทุกครั้งที่ HEAD (คอมมิตปัจจุบันของคุณ) หรือตัวชี้สาขาเคลื่อนที่ Git จะบันทึกเหตุการณ์นี้ไว้ในรีฟล็อก ซึ่งรวมถึง:
- การคอมมิตการเปลี่ยนแปลง
- การสลับสาขา
- การผสานหรือการรีเบส
- การดำเนินการรีเซ็ต
- การโคลนคลัง
การดูรีฟล็อกของคุณ
หากต้องการดูรีฟล็อก เพียงใช้คำสั่ง git reflog คำสั่งนี้จะแสดงรายการการกระทำและสถานะของ HEAD ในขณะนั้น
มาจำลองการกระทำบางอย่าง แล้วดูรีฟล็อกกัน:
git init my_repo
cd my_repo
echo "First line" > file.txt
git add file.txt
git commit -m "Initial commit"
echo "Second line" >> file.txt
git add file.txt
git commit -m "Add second line"
git reflogถอดรหัสรายการรีฟล็อก
รายการรีฟล็อกแต่ละรายการมีรูปแบบเฉพาะ มาลองแยกดูรายการทั่วไปที่คุณอาจพบ:
a1b2c3d HEAD@{0}: commit: Add new feature
a1b2c3d: ค่าแฮช SHA-1 ของคอมมิตที่HEADอยู่ ณ ขณะนั้นHEAD@{0}: นี่คือตัวชี้ "รายการรีฟล็อก" โดย@{0}คือสถานะล่าสุด@{1}คือสถานะก่อนหน้านั้น และไล่ต่อไปเช่นนี้commit: Add new feature: คำอธิบายการกระทำที่ทำให้HEADเคลื่อนที่
ตัวชี้เหล่านี้สำคัญอย่างยิ่งต่อการกู้คืน!
สถานการณ์: กู้คืนคอมมิตที่สูญหาย
ลองนึกภาพว่าคุณสร้างคอมมิตหนึ่งรายการ แล้วเผลอยกเลิกด้วย git reset --soft HEAD~1 คอมมิตของคุณไม่อยู่ในประวัติสาขาปัจจุบันแล้ว แต่ยังไม่ได้หายไปจริง!
รีฟล็อกยังจำคอมมิตนั้นได้ มาจำลองข้อผิดพลาดที่เกิดขึ้นบ่อยนี้กัน:
git init my_project_recovery
cd my_project_recovery
echo "Initial content" > start.txt
git add start.txt
git commit -m "Initial commit"
echo "Important feature" > feature.txt
git add feature.txt
git commit -m "Added an important feature"
# Oops! Accidentally reset
git reset --soft HEAD~1
git reflogนำคอมมิตกลับคืนมา
หลังจากรีเซ็ต หากคุณเรียกใช้ git reflog คุณจะเห็นรายการของคอมมิต "Added an important feature" ซึ่งอาจอยู่ที่ HEAD@{1} หรือรายการที่ใกล้เคียง
หากต้องการกู้คืน คุณสามารถใช้ git reset ร่วมกับรายการรีฟล็อกได้ ตัวอย่างเช่น หากแฮชของคอมมิตที่สูญหายคือ abcdefg หรือรายการรีฟล็อกคือ HEAD@{1}:
# Assuming the lost commit was HEAD@{1} in the reflog
git reset --hard HEAD@{1}
# Or using the specific commit hash from reflog
# git reset --hard abcdefg
# Now, check your log. The commit is back!
git log --onelineสถานการณ์: เรียกคืนสาขาที่ถูกลบ
จะเกิดอะไรขึ้นหากคุณเผลอลบทั้งสาขาก่อนผสานสาขา หรือคิดว่าไม่จำเป็นต้องใช้สาขานั้นอีกแล้ว
สาขาเป็นเพียงตัวชี้ไปยังคอมมิต หากคุณลบสาขา คอมมิตที่สาขานั้นชี้อยู่จะไม่ถูกลบออกจากคลังของคุณทันที รีฟล็อกยังจำได้ว่า HEAD ของสาขานั้นเคยอยู่ที่ใด!
กู้คืนสาขาจากรีฟล็อก
สมมติว่าคุณมีสาขาชื่อ feature-x ทำงานอยู่บนสาขานั้น แล้วลบด้วย git branch -D feature-x
เมื่อคุณเรียกใช้ git reflog คุณอาจเห็นรายการดังนี้:
1234567 HEAD@{5}: branch: Created branch feature-x หรือabcdefg HEAD@{2}: checkout: moving from feature-x to master
คุณสามารถใช้แฮชคอมมิต (เช่น 1234567 หรือ abcdefg) จากรายการรีฟล็อกที่สาขายังทำงานอยู่ เพื่อสร้างสาขานั้นขึ้นใหม่:
# Assume 'feature-x' was deleted and its last commit was '1234567'
# Create a new branch pointing to that commit
git branch feature-x-recovered 1234567
# Now, check out your recovered branch
git checkout feature-x-recovered
# Verify its history
git log --onelineรายการรีฟล็อกหมดอายุ
แม้รีฟล็อกจะเป็นตาข่ายนิรภัยที่ทรงพลัง แต่รายการต่าง ๆ ไม่ได้อยู่ตลอดไป Git จะล้างรายการรีฟล็อกเก่าหลังผ่านช่วงเวลาหนึ่ง
- โดยค่าเริ่มต้น รายการที่เข้าถึงได้ (จาก
HEADปัจจุบันของคุณ) จะหมดอายุหลังผ่านไป 90 วัน - รายการที่เข้าถึงไม่ได้ (เช่น จากสาขาหรือคอมมิตที่ถูกลบและไม่มีการอ้างอิงอีกต่อไป) จะหมดอายุหลังผ่านไป 30 วัน
ดังนั้นควรกู้คืนงานที่ "สูญหาย" ให้เร็วที่สุด!
โจทย์ท้าทายการกู้คืนด้วยรีฟล็อก
คุณสร้างสาขาฟีเจอร์ใหม่ สร้างคอมมิตหลายรายการ แล้วเผลอลบสาขานั้นโดยไม่ได้ผสาน คุณเรียกใช้ git reflog และเห็นรายการนี้:
...
c0ffee1 HEAD@{3}: commit: Implement new user profile page
bada55e HEAD@{4}: checkout: moving from feature/profile to main
...ลำดับคำสั่งใดจะสร้างสาขา feature/profile ขึ้นใหม่ได้อย่างถูกต้อง โดยให้ชี้ไปยังคอมมิตล่าสุดที่สาขานี้มีอยู่ก่อนถูกลบ
รีฟล็อก: ตาข่ายนิรภัยของ Git
คุณเชี่ยวชาญการใช้ git reflog ซึ่งเป็นเครื่องมือสำคัญสำหรับกู้คืนงานที่ "สูญหาย" ในคลัง Git ภายในเครื่องของคุณแล้ว โปรดจำไว้ว่า:
- รีฟล็อกติดตามตำแหน่งที่
HEADและตัวชี้สาขาเคยอยู่ - ใช้
git reflogเพื่อดูประวัตินี้ - คุณสามารถกู้คืนคอมมิตหรือสาขาได้โดยใช้
git resetหรือgit branchร่วมกับรายการรีฟล็อก (HEAD@{n}หรือแฮชคอมมิต) - รายการรีฟล็อกมีวันหมดอายุ ดังนั้นหากต้องการกู้คืนสิ่งใดควรดำเนินการโดยเร็ว!
รักษาประวัติ Git ให้สะอาด แต่โปรดทราบว่ารีฟล็อกพร้อมช่วยเหลือเมื่อเกิดเหตุฉุกเฉิน!
คำถามที่พบบ่อย
บทเรียน “Git Reflog และการกู้คืนประวัติ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Git Reflog และการกู้คืนประวัติ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Git & GitHub Professional Workflow ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Git & GitHub Professional Workflow มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Git Reflog และการกู้คืนประวัติ”
เรียนรู้ `git reflog` เพื่อกู้คืนคอมมิตหรือสาขาที่สูญหาย ช่วยเป็นตาข่ายนิรภัยสำหรับงานของคุณ คุณปฏิบัติ Git & GitHub Professional Workflow ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Git & GitHub Professional Workflow หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Git & GitHub Professional Workflow บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Git Reflog และการกู้คืนประวัติ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Git & GitHub Professional Workflow นี้ได้ไหม
ได้ บทเรียน Git & GitHub Professional Workflow ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Git Reflog และการกู้คืนประวัติ
- Git Bisect สำหรับการแก้ไขข้อบกพร่อง
- การบำรุงรักษาและจัดระเบียบคลังเก็บ
- การเขียนประวัติใหม่ด้วย git filter-repo