git reflog สามารถช่วยคุณได้
พิมพ์ลงในคอนโซลของคุณและคุณจะได้รับรายการประวัติคอมไพล์ของคุณพร้อมกับ SHA-1 ที่แสดงถึงพวกเขา
เพียงชำระเงิน SHA-1 ที่คุณต้องการเปลี่ยนกลับ
HEADก่อนที่จะตอบให้เพิ่มพื้นหลังบางอธิบายสิ่งที่เป็นแบบนี้
First of all what is HEAD?
HEADเป็นเพียงการอ้างอิงถึงการกระทำปัจจุบัน (ล่าสุด) ในสาขาปัจจุบัน
มีได้เพียงรายการเดียวHEADในช่วงเวลาใดเวลาหนึ่ง (ไม่รวมgit worktree)
เนื้อหาของHEADจะถูกเก็บไว้ภายใน.git/HEADและมี SHA-1 ขนาด 40 ไบต์ของคอมมิตปัจจุบัน
detached HEAD
หากคุณไม่ได้อยู่บนล่าสุดกระทำ - ความหมายที่จะชี้ไปก่อนกระทำในประวัติศาสตร์ที่เรียกว่าHEADdetached HEAD

ในบรรทัดคำสั่งจะมีลักษณะเช่นนี้ - SHA-1 แทนชื่อสาขาเนื่องจากHEADไม่ได้ชี้ไปที่ส่วนปลายของสาขาปัจจุบัน


ตัวเลือกบางอย่างในการกู้คืนจาก HEAD ที่แยกออกมา:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
การดำเนินการนี้จะชำระเงินสาขาใหม่ที่ชี้ไปยังการคอมมิตที่ต้องการ
คำสั่งนี้จะชำระค่าคอมมิตที่กำหนด
ณ จุดนี้คุณสามารถสร้างสาขาและเริ่มทำงานได้ตั้งแต่จุดนี้เป็นต้นไป
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
คุณสามารถใช้reflogเช่นกัน
git reflogจะแสดงการเปลี่ยนแปลงใด ๆ ที่อัปเดตHEADและตรวจสอบรายการ reflog ที่ต้องการจะตั้งค่าHEADกลับเป็นคอมมิตนี้
ทุกครั้งที่มีการแก้ไข HEAD จะมีรายการใหม่ในไฟล์ reflog
git reflog
git checkout HEAD@{...}
สิ่งนี้จะทำให้คุณกลับไปสู่การกระทำที่คุณต้องการ

"ย้าย" HEAD ของคุณกลับไปที่คอมมิตที่ต้องการ
git reset --hard 0d1d7fc32
git stash
git reset --hard 0d1d7fc32
git stash pop
"เลิกทำ" ช่วงคอมมิตหรือคอมมิตที่กำหนด
คำสั่งรีเซ็ตจะ "เลิกทำ" การเปลี่ยนแปลงใด ๆ ที่ทำในคอมมิตที่กำหนด
การคอมมิตใหม่กับแพตช์เลิกทำจะถูกคอมมิตในขณะที่คอมมิตเดิมจะยังคงอยู่ในประวัติ
git revert <sha-1>
สคีมานี้แสดงให้เห็นว่าคำสั่งใดทำอะไร
อย่างที่คุณเห็นมีการreset && checkoutปรับเปลี่ยนไฟล์HEAD.
