ก่อนที่จะตอบลองเพิ่มพื้นหลังอธิบายว่านี่HEAD
คืออะไร
First of all what is HEAD?
HEAD
เป็นเพียงการอ้างอิงถึงการกระทำปัจจุบัน (ล่าสุด) ในสาขาปัจจุบัน
สามารถมีได้เพียงครั้งเดียวHEAD
ในเวลาที่กำหนด (ไม่รวมgit worktree
)
เนื้อหาของHEAD
จะถูกเก็บไว้ภายใน.git/HEAD
และประกอบด้วย 40 ไบต์ SHA-1 ของการกระทำปัจจุบัน
detached HEAD
หากคุณไม่ได้อยู่บนล่าสุดกระทำ - ความหมายที่จะชี้ไปก่อนกระทำในประวัติศาสตร์ก็เรียกว่าHEAD
detached 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 ของคุณกลับไปยังการกระทำที่ต้องการ
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
- หมายเหตุ: ( ตั้งแต่ Git 2.7 ) คุณสามารถใช้งานได้
git rebase --no-autostash
เช่นกัน
"เลิกทำ" ช่วงการมอบหมายหรือการส่งที่กำหนด
คำสั่งรีเซ็ตจะ "เลิกทำ" การเปลี่ยนแปลงใด ๆ ที่ทำในการส่งที่กำหนด
การคอมมิทใหม่ด้วยแพทช์การเลิกทำจะถูกส่งไปในขณะที่การคอมมิชชันดั้งเดิมจะยังคงอยู่ในประวัติศาสตร์เช่นกัน
# Add a new commit with the undo of the original one.
# The <sha-1> can be any commit(s) or commit range
git revert <sha-1>
คีมานี้แสดงให้เห็นว่าคำสั่งใดทำอะไร
ที่คุณสามารถดูมีการปรับเปลี่ยนreset && checkout
HEAD
git checkout 23b6772
ควรทำ.