ย้อนกลับที่เก็บ Git ระยะไกล


110

ฉันมีที่เก็บ Git ระยะไกลและฉันต้องย้อนกลับการnกระทำครั้งสุดท้ายเป็นการให้อภัยที่เย็นชา

คำตอบ:


135

คุณสามารถใช้git revert <commit>…สำหรับ n commits ทั้งหมดจากนั้นกดตามปกติโดยไม่เปลี่ยนแปลงประวัติ

หรือคุณสามารถ "ย้อนกลับ" git reset --hard HEAD~nกับ หากคุณกำลังผลักดันในที่เก็บสาธารณะหรือที่เก็บที่ใช้ร่วมกันคุณอาจแยกและทำลายงานอื่น ๆ ตามสาขาเดิมของคุณ Git จะป้องกันไม่ให้คุณทำเช่นนั้น แต่คุณสามารถใช้git push -fเพื่อบังคับให้อัปเดตได้


5
คุณสามารถย้อนกลับไปยังคอมมิตเฉพาะได้โดยใช้: โดยgit reset --hard [sha1]ที่ sha1 คือตัวระบุแฮชคอมมิต
pisaruk

7
คุณไม่สามารถใช้ get reset --hard ในที่เก็บระยะไกลได้เนื่องจากไม่มีไดเร็กทอรีการทำงาน คำถามเดิมระบุว่ามี repo ระยะไกลเท่านั้นไม่มีการกล่าวถึง repo ในพื้นที่
Hazok

2
เพียงแค่ทราบว่า git push -f จะบังคับให้พุชสาขาในพื้นที่ทั้งหมดไปยังรีโมตของพวกเขา
cowlinator

โปรดทราบว่าการใช้revertจะทำให้สาขาฟีเจอร์ของคุณได้รับการพิจารณาว่ารวม "แล้ว" นั่นเพราะสาขาเหล่านี้จะจริงจะถูกรวมเข้าด้วยกัน แต่การเปลี่ยนแปลงถูกเปลี่ยนกลับ การแก้ไข: เชอร์รี่รับหรือย้อนกลับย้อนกลับกระทำ
Benedikt

@ เบเนดิกต์reset --hardยังทำให้สาขาคุณลักษณะได้รับการปฏิบัติตามที่ผสานแล้วหรือไม่? สมมติฐานของฉันคือมันจะไม่ (ที่ไหนrevertจะ)
Marcus Leon

37

elmarco ถูกต้อง ... ข้อเสนอแนะของเขาดีที่สุดสำหรับที่เก็บที่แชร์ / สาธารณะ (หรืออย่างน้อยสาขาสาธารณะ) หากไม่ได้แชร์ (หรือคุณยินดีที่จะรบกวนผู้อื่น) คุณสามารถส่งข้อความอ้างอิงเฉพาะ:

git push origin old_master:master

หรือหากมีการคอมมิต SHA1 (พูด 1e4f99e ในรูปแบบย่อ) คุณต้องการย้ายกลับไปที่:

git push origin 1e4f99e:master

9

โชคดีที่ฉันสามารถใช้โซลูชันของ Pat Notzซึ่งลบการกระทำที่ไม่ต้องการออกไปโดยสิ้นเชิง อย่างไรก็ตามในตอนแรกฉันได้รับข้อผิดพลาด

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

แต่การเพิ่ม-fอ็อพชันforce ( ) จะเขียนทับข้อผิดพลาดนี้

git push -f origin 52e36b294e:master

3

หากคุณสามารถเข้าถึง repo ระยะไกลได้โดยตรงคุณสามารถใช้:

git reset --soft <sha1>

สิ่งนี้ใช้ได้ผลเนื่องจากไม่มีความพยายามที่จะแก้ไขไดเร็กทอรีการทำงานที่ไม่มีอยู่จริง สำหรับรายละเอียดเพิ่มเติมโปรดดูคำตอบเดิม:

ฉันจะยกเลิกการคอมมิตสุดท้ายในที่เก็บ git bare ได้อย่างไร


2
ทำไม--softถึงจำเป็น? คุณอาจทำสิ่งเดียวกันgit resetนี้ได้โดยไม่ต้องตั้งค่าสถานะโหมด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.