เป็นวิธีที่ง่ายที่สุดในการยกเลิกการกระทำที่เฉพาะเจาะจงคือ:
- ไม่อยู่ในหัวหรือหัวหน้า
- ได้ถูกผลักไปยังระยะไกล
เพราะถ้ามันไม่ได้กระทำล่าสุด
git reset HEAD
ไม่ทำงาน และเนื่องจากมันถูกผลักไปที่รีโมต
git rebase -i
และ
git rebase --onto
จะทำให้เกิดปัญหาในรีโมท
ยิ่งกว่านั้นฉันไม่ต้องการแก้ไขประวัติจริงๆ หากมีรหัสไม่ดีแสดงว่ามีอยู่ในประวัติและสามารถมองเห็นได้ ฉันแค่ต้องการมันในสำเนาที่ใช้งานได้และฉันก็ไม่รังเกียจที่จะรวมการย้อนกลับ
กล่าวอีกนัยหนึ่งสิ่งที่เทียบเท่าGitของคำสั่ง svn ต่อไปนี้:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
ซึ่งจะลบการเปลี่ยนแปลงทั้งหมดจาก 295 ถึง 302 โดยย้อนกลับการรวมการเปลี่ยนแปลงทั้งหมดในการแก้ไขเหล่านั้นเป็นการกระทำใหม่
svn merge -c -302 ^/trunk
ซึ่งยกเลิกการกระทำ 302 แน่นอนโดยการเพิ่มการกระทำอื่นที่ย้อนกลับผสานการเปลี่ยนแปลงจากการกระทำนั้น ๆ
ฉันคิดว่ามันควรจะใช้งานได้ง่ายใน Git และกรณีการใช้งานที่ค่อนข้างธรรมดา ปรมาณูมีจุดมุ่งหมายอะไรอีก?
เรามีการจัดเตรียมstashingและทั้งหมดเพื่อให้แน่ใจว่าการกระทำนั้นสมบูรณ์แบบในระดับอะตอมคุณไม่ควรเลิกทำการคอมมิทเหล่านั้นอย่างน้อยหนึ่งอย่างได้อย่างง่ายดายหรือไม่?