วิธีลบคอมมิตขาออกที่ไม่ได้รับการขัดจังหวะใน Visual Studio


132

ฉันดันการเปลี่ยนแปลงแบบทีละขั้นในสาขาใหม่ใน Visual Studio 2017 ไปยังที่เก็บในเครื่องของฉันโดยบังเอิญ ไม่ได้ถูกพุชไปยังที่เก็บระยะไกล ฉันต้องการกำจัดมัน แต่หาวิธีทำไม่ได้ ฉันเปลี่ยนจากสาขาหลักในพื้นที่เป็นสาขาใหม่ จากนั้นฉันก็ลบสาขาใหม่ แต่การกระทำที่ส่งออกยังคงแสดงอยู่ จะลบหรือเปลี่ยนกลับได้อย่างไร?

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

คำตอบ:


209

เปิดแท็บประวัติใน Team Explorer จากไทล์ Branches (คลิกขวาที่สาขาของคุณ) จากนั้นในประวัติให้คลิกขวาที่คอมมิตก่อนหน้าที่คุณไม่ต้องการพุชเลือกรีเซ็ต ซึ่งจะย้ายสาขากลับไปที่คอมมิตนั้นและควรกำจัดคอมมิตที่คุณทำ ในการรีเซ็ตก่อนการคอมมิตที่กำหนดคุณต้องเลือกพาเรนต์

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


26
ควรใส่ส่วนที่เป็นตัวหนาที่ ** คุณต้องเลือกใช้ RESET ใน PARENT ของการกระทำที่ผิดพลาด ** - VS2017 ที่แปลกประหลาดทันทีหลังจากที่คุณทำการคอมมิตเสนอตัวเลือกเมนูที่ดำเนินการรีเซ็ตเป้าหมายที่คอมมิต คุณเพิ่งทำไป (ไม่ -op) - ฉันใช้เวลาสองสามนาทีจนกระทั่งพบโพสต์ของคุณและตระหนักว่าฉันควรรีเซ็ต [ถึง] ให้ผู้ปกครองกระทำ .. ตัวเลือกเมนูที่เป็น "รีเซ็ต" เป็นคำที่ไม่ค่อยดีเล็กน้อย - ฟังดูเหมือนจะ รีเซ็ตคอมมิตเฉพาะ == ซึ่งหมายความว่าควรใช้กับคอมมิตนั้น ถ้าเป็นการรีเซ็ตเป็นฉันคิดว่าฉันจะเข้าใจได้เร็วขึ้น
Caius Jard

1
(@JH) ขอบคุณสำหรับคำตอบ .. atCJ ขอบคุณสำหรับความคิดเห็นครับ. atJH ขอบคุณสำหรับตัวหนาในส่วนนั้น ... atEverybody .... นั่นคือส่วนที่ฉันติดอยู่ .... และฉันหมายความว่าติดอยู่ #freedom
granadaCoder

การตั้งชื่อสอดคล้องกับวิธีที่คอมไพล์เรียกใช้คำสั่ง หากคุณแก้ไขไฟล์ไฟล์เหล่านั้นจะถูกรีเซ็ตเช่นกัน หากคุณมีไฟล์ที่จัดขั้นไว้ไฟล์เหล่านั้นจะถูกรีเซ็ตเช่นกัน นั่นเป็นเหตุผลว่าทำไมจึงมีการรีเซ็ตการกระทำล่าสุดด้วย มันรีเซ็ตเป็นคอมมิตนั้น
jessehouwing

79

ฉันไม่พบคำตอบที่ดีเพียงคำตอบเดียวที่ช่วยฉันกำจัดปัญหานี้

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

  1. ไปที่สาขา
  2. เลือกหรือสร้างสาขาอื่นที่ไม่ใช่ master
  3. ลบเวอร์ชันโลคัล / พื้นที่ทำงานของ master
  4. เปลี่ยนเป็นหลักจาก remotes/origin

6
นี่คือคำตอบที่ได้ผลคุณไม่ต้องกดrevert
sojim

2
วิธีนี้ใช้งานได้ แต่คุณติดขัดเมื่อคุณต้องการคอมมิตเฉพาะบางส่วน (ไม่ใช่ทั้งหมด) จากการคอมมิตขาออก
KatariaA

@KatariaA คุณอาจต้องสำรองข้อมูลออฟไลน์ของแต่ละไฟล์และทำตามขั้นตอนที่เขียนไว้ข้างต้น เมื่อเสร็จแล้วคุณสามารถแทนที่ไฟล์ที่เกี่ยวข้องได้โดยใช้การสำรองข้อมูลออฟไลน์
Chaos Legion

1
เพิ่งได้รับการโหวตไม่กี่ครั้ง ความคิดเห็นจะดีมาก
Chaos Legion

1
ผลงาน วิธีแก้ปัญหาที่สะอาดรวดเร็วและง่ายดาย
Tom Tom

13

TL; DR:

ใช้git reset --soft HEAD~ใน cmd จากโฟลเดอร์. sln


วันนี้ฉันเผชิญกับมันและรู้สึกหนักใจที่VSCodeแนะนำสิ่งนั้นในขณะที่พี่ใหญ่Visual Studioไม่ได้ทำ

คำตอบส่วนใหญ่มีประโยชน์ หากฉันมีความมุ่งมั่นมากกว่าที่เคยทำมาก่อนการสูญเสียสิ่งเหล่านี้ทั้งหมดจะน่าผิดหวัง ยิ่งไปกว่านั้นหากVSCodeทำในครึ่งวินาทีก็ไม่ควรซับซ้อน

มีเพียงคำตอบของ jessehouwingเท่านั้นที่ใกล้เคียงที่สุดกับวิธีง่ายๆ


สมมติว่าการกระทำที่ไม่ต้องการเป็นสิ่งสุดท้ายที่จะเกิดขึ้นนี่คือวิธีที่ฉันแก้ไข:

ไปที่->Team Explorer Syncคุณจะเห็นการกระทำทั้งหมดที่นั่น กดActionsเมนูแบบเลื่อนลงและOpen Command Prompt

ตัวอย่างที่ไม่ต้องการแก้ไข

คุณจะมีหน้าต่าง cmd git reset --soft HEAD~รับแจ้งมีการเขียน หากมีการกระทำที่ไม่ต้องการหลายครั้งให้เพิ่มจำนวนเงินหลัง~(เช่นgit reset --soft HEAD~5)


(หากคุณไม่ได้ใช้งานgitให้ตรวจสอบการใช้ภาษาพูด)

ฉันหวังว่ามันจะช่วยได้และหวังว่าในเวอร์ชันถัดไปทีม VS จะเพิ่มมันในตัว


3

สมมติว่าคุณได้ผลักดันการเปลี่ยนแปลงล่าสุดไปยังเซิร์ฟเวอร์:

  1. ปิด Visual Studio และลบสำเนาของโครงการในเครื่องของคุณ
  2. เปิด Visual Studio ไปที่แท็บ Team Explorer คลิกจัดการการเชื่อมต่อ (ปลั๊ก)
  3. คลิกลูกศรดรอปดาวน์ที่อยู่ถัดจาก Manage Connections, Connect to a Project
  4. เลือกโปรเจ็กต์ยืนยันโลคัลพา ธ แล้วคลิกปุ่มเชื่อมต่อ

เมื่อคุณเปิดโครงการขึ้นมาใหม่ทั้งการกระทำและการเปลี่ยนแปลงควรเป็นศูนย์


0

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


0

พยายามปรับฐานสาขาหลักในพื้นที่ของคุณใหม่เป็นสาขาหลักระยะไกล / ต้นทางและแก้ไขข้อขัดแย้งใด ๆ ในกระบวนการ


-1

คุณมี 2 ทางเลือกในการดำเนินการดังกล่าวเพื่อยกเลิกการกระทำที่ส่งออกทั้งหมดของคุณหรือเพื่อยกเลิกการกระทำที่เฉพาะเจาะจง ..

1- ยกเลิกการกระทำที่ส่งออกทั้งหมดของคุณ:

ในการทิ้งคอมมิตขาออกทั้งหมดของคุณตัวอย่างเช่นหากคุณมีสาขาในพื้นที่ชื่อ master จาก remote branch คุณสามารถ:

1- เปลี่ยนชื่อสาขาในพื้นที่ของคุณจากต้นแบบเป็นอะไรก็ได้เพื่อให้คุณสามารถลบออกได้ 2- ลบสาขาที่เปลี่ยนชื่อ 3- สร้างสาขาใหม่จากต้นแบบ

ตอนนี้คุณมีสาขาใหม่โดยไม่ต้องมีภาระผูกพัน ..

2- ยกเลิกการกระทำที่เฉพาะเจาะจง: ในการยกเลิกการกระทำที่เฉพาะเจาะจงคุณต้องยกเลิกการกระทำที่ไม่จำเป็นโดย:

1- ดับเบิลคลิกที่การกระทำที่ไม่จำเป็น ดับเบิลคลิกที่การกระทำที่ไม่จำเป็น 2- คลิกที่ย้อนกลับ คลิกที่ย้อนกลับ

แต่ FYI การกระทำที่ถูกเปลี่ยนกลับจะปรากฏในประวัติการกระทำของคุณด้วยการย้อนกลับการกระทำ ..

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