Sourcetree - เลิกทำการคอมมิต


208

ฉันใช้ Sourcetree สำหรับ Windows สำหรับ git-repository และต้องการยกเลิกการคอมมิต

เป็นไปได้ไหม หากฉัน "ย้อนกลับการกระทำ" มันจะสร้างการส่งมอบครั้งที่สองซึ่งจะคืนค่าการส่งครั้งแรก แต่ฉันไม่ต้องการให้การส่งมอบครั้งแรกปรากฏขึ้นในการควบคุมแหล่งที่มาของฉัน

ฉันสามารถลบที่เก็บข้อมูลในเครื่องของฉันและดึงอีกครั้งโดยไม่ส่งข้อมูลภายในเครื่อง แต่อาจมีวิธีอื่นหรือไม่


ฉันเขียนบทความโดยละเอียดพร้อมภาพหน้าจอ การแบ่งปันด้วยความหวังว่าจะช่วยได้: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

คำตอบ:


345
  1. คลิกขวาที่การมอบหมายที่คุณต้องการรีเซ็ตเป็น (ไม่ใช่รายการที่คุณต้องการลบ!)
  2. เลือก "รีเซ็ตต้นแบบเป็นคอมมิชชันนี้"
  3. เลือกรีเซ็ต "อ่อน"

การรีเซ็ตแบบซอฟต์จะเก็บการเปลี่ยนแปลงในเครื่องของคุณ

ที่มา: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

แก้ไข

เกี่ยวกับgit revert: คำสั่งนี้สร้างการคอมมิทใหม่ซึ่งจะยกเลิกการคอมมิชชันอื่น เช่นถ้าคุณมีคอมมิทที่เพิ่มไฟล์ใหม่git revertสามารถใช้คอมมิทซึ่งจะลบไฟล์ใหม่

เกี่ยวกับการใช้ซอฟต์รีเซ็ต: สมมติว่าคุณมีคอมมิทAถึงE( A---B---C---D---E) และคุณต้องการลบคอมมิทล่าสุด ( E) จากนั้นคุณสามารถทำการรีเซ็ตแบบนุ่มนวลเพื่อส่งมอบDได้ ด้วยคอมมิตการรีเซ็ตแบบนุ่มนวลEจะถูกลบออกจากคอมไพล์ แต่การเปลี่ยนแปลงในระบบจะถูกเก็บไว้ มีตัวอย่างที่มากขึ้นในการที่มีเอกสารประกอบคอมไพล์รีเซ็ต


34
หรือถ้าคุณกำลังทำงานในสาขา - "รีเซ็ตสาขาปัจจุบันเป็นการกระทำนี้"
Tom Auger

5
ฉันไม่เข้าใจคำอธิบาย UI เหล่านี้ ... รีเซ็ตสาขาปัจจุบันเป็นการกระทำนี้มากดูเหมือนจะไม่เป็นการลบการกระทำ และในที่สุดก็ทำสิ่งที่คุณคาดหวังมากกว่านี้ มันรีเซ็ตสำเนาการทำงานของฉันเป็นกระทำแทนที่จะลบมัน
MrFox

ฉันเห็นด้วยกับ @MrFox หลังจากที่ฉันทำสิ่งที่ฉันไม่ต้องการยังคงปรากฏอยู่ในต้นไม้
Timmmm

@Timmmm: คำอธิบายใหม่ช่วยได้หรือไม่?
nightlyop

ที่จริงฉันรู้แล้วว่าฉันได้ผลักความมุ่งมั่นของฉันไปที่ gitub ฉันพบบทความที่อธิบายวิธีการ "เขียนประวัติศาสตร์ใหม่"แต่ดูเหมือนว่าจะมีปัญหามากกว่าที่ควรค่า!
Timmmm

46

หากคุณเลือกรายการบันทึกที่คุณต้องการเปลี่ยนกลับเป็นคุณสามารถคลิกที่ "รีเซ็ตเป็นการกระทำนี้" ใช้ตัวเลือกนี้เฉพาะเมื่อคุณไม่ได้ผลักดันการเปลี่ยนแปลงย้อนหลัง หากคุณกังวลเกี่ยวกับการสูญเสียการเปลี่ยนแปลงคุณสามารถใช้โหมด soft ซึ่งจะปล่อยให้ชุดของการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด (สิ่งที่คุณเพิ่งเปลี่ยน) การใช้งานแบบผสมจะรีเซ็ตสำเนาการทำงาน แต่เก็บการเปลี่ยนแปลงเหล่านั้นไว้และสิ่งที่ยากเพียงกำจัดการเปลี่ยนแปลงทั้งหมด นี่คือภาพหน้าจอบางส่วน:

ป้อนคำอธิบายรูปภาพที่นี่


3
หากคุณยังเห็นไอคอนแสดงการพุชพร้อมใช้งานจากการคอมมิชชันก่อนหน้าของคุณ (ซึ่งคุณเพิ่งล้างออก), การดึงและ Sourcetree ดูเหมือนว่าจะอัปเดต UI
ChristoKiwi

6

หากคุณต้องการลบการคอมมิทคุณสามารถทำได้โดยเป็นส่วนหนึ่งของการรีบูตแบบโต้ตอบ แต่ทำด้วยความระมัดระวังดังนั้นคุณจะไม่ต้องยุ่งกับ repo ของคุณ

ใน Sourcetree:

  1. คลิกขวาที่คอมมิทที่เก่ากว่าที่คุณต้องการลบและเลือก " Rebase children of xxxx interactive ... " คนที่คุณคลิกจะเป็น "ฐาน" ของคุณและคุณสามารถเปลี่ยนแปลงการกระทำทุกอย่างที่เกิดขึ้นหลังจากนั้น
  2. ในหน้าต่างใหม่เลือกการกระทำที่คุณต้องการจากนั้นกดปุ่ม " ลบ " - ที่ด้านล่างหรือคลิกขวาที่การส่งและคลิก " ลบการกระทำ "
  3. คลิก " ตกลง " (หรือ " ยกเลิก " หากคุณต้องการยกเลิก)

ลองอ่านโพสต์บล็อก Atlassianนี้เพื่ออ่านเพิ่มเติมเกี่ยวกับการรีบูตแบบโต้ตอบใน Sourcetree


นี่คือคำตอบที่ฉันกำลังมองหาทำงานตรงตามที่ต้องการ
Cliff Burton

0

หากคุณอยู่ในสาขาอื่นคุณต้อง "ตรวจสอบการกระทำนี้ก่อน" เพื่อยืนยันว่าคุณต้องการลบและจากนั้น "รีเซ็ตสาขาปัจจุบันเป็นการกระทำนี้" การเลือกไรท์ก่อนหน้านี้จะทำงานได้

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