ขึ้นอยู่กับความหมายของ "ย้อนกลับ" เป็นอย่างมาก
สลับเป็นการกระทำที่แตกต่างชั่วคราว
หากคุณต้องการกลับไปที่มันชั่วคราวหลอกแล้วกลับมาที่คุณอยู่สิ่งที่คุณต้องทำคือตรวจสอบการกระทำที่ต้องการ:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
หรือถ้าคุณต้องการที่จะมุ่งมั่นในขณะที่คุณอยู่ที่นั่นไปข้างหน้าและสร้างสาขาใหม่ในขณะที่คุณอยู่ที่:
git checkout -b old-state 0d1d7fc32
หากต้องการกลับไปที่ที่คุณอยู่เพียงตรวจสอบสาขาที่คุณอยู่อีกครั้ง (หากคุณทำการเปลี่ยนแปลงเช่นเคยเมื่อเปลี่ยนสาขาคุณจะต้องจัดการกับพวกเขาตามความเหมาะสมคุณสามารถรีเซ็ตเพื่อโยนพวกเขาออกไปคุณสามารถซ่อน, เช็คเอาท์, ที่เก็บป๊อปเพื่อนำติดตัวไปด้วยคุณสามารถกระทำได้ ถ้าคุณต้องการสาขาที่นั่น)
ลบคอมมิทที่ไม่ได้เผยแพร่อย่างหนัก
ในทางกลับกันถ้าคุณต้องการกำจัดทุกอย่างที่ทำไปตั้งแต่นั้นมามีสองสิ่งที่เป็นไปได้ หนึ่งถ้าคุณยังไม่ได้เผยแพร่ข้อผูกพันเหล่านี้เพียงแค่รีเซ็ต:
# 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 การย้อนกลับมีความหมายที่เฉพาะเจาะจงมาก: สร้างคอมมิชชันด้วย reverse patch เพื่อยกเลิกมัน วิธีนี้คุณจะไม่เขียนประวัติใด ๆ
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
git-revert
manpageจริงครอบคลุมจำนวนมากนี้ในรายละเอียดของ อีกประการหนึ่งการเชื่อมโยงที่เป็นประโยชน์ส่วน git-scm.com นี้ถกคอมไพล์ย้อน
หากคุณตัดสินใจว่าคุณไม่ต้องการเปลี่ยนกลับมาใช้งานคุณสามารถเปลี่ยนกลับ (ดังอธิบายที่นี่) หรือรีเซ็ตกลับเป็นก่อนเปลี่ยนกลับ (ดูหัวข้อก่อนหน้า)
คุณอาจพบว่าคำตอบนี้มีประโยชน์ในกรณีนี้:
จะย้าย HEAD กลับไปยังตำแหน่งก่อนหน้าได้อย่างไร (หัวเดี่ยว)