ฉันจะแก้ไขสาขา git ที่ไม่ถูกต้องได้อย่างไร

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

414
31 мая '10 в 8:30 2010-05-31 08:30 กำหนดโดย mikewilliamson ในวันที่ 31 พฤษภาคม 2553 เวลา 8:30 น. 2010-05-31 08:30 น
@ 8 คำตอบ

หากคุณยังไม่ได้คลิกการเปลี่ยนแปลงคุณสามารถทำการรีเซ็ตแบบซอฟต์:

 git reset --soft HEAD^ 

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

 git checkout branch git commit 

ข้อเสียคือคุณต้องป้อนข้อความยืนยันอีกครั้ง

618
31 мая '10 в 8:53 2010-05-31 08:53 ตอบกลับ Blair Holloway เมื่อวันที่ 31 พฤษภาคม '10 เวลา 8:53 2010-05-31 08:53

หากคุณมีสำเนาการทำงานที่สะอาด (ไม่ได้แก้ไข)

ย้อนกลับไปหนึ่งคอมมิชชัน (ให้แน่ใจว่าคุณตรวจสอบแฮชการคอมมิชชันสำหรับขั้นตอนถัดไป):

 git reset --hard HEAD^ 

ในการถ่ายโอนการตรึงนี้ไปยังสาขาอื่น:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

หากคุณเปลี่ยนหรือไม่ติดตามการเปลี่ยนแปลง

นอกจากนี้โปรดทราบว่าการ git reset --hard จะ ฆ่าการเปลี่ยนแปลง ที่ ไม่สามารถเล่นได้และแก้ไขใด ๆ ที่คุณอาจมีดังนั้นหากคุณมีสิ่งที่คุณต้องการ:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 ตอบ Michael Mrozek เมื่อวันที่ 31 พฤษภาคม 10 เวลา 8:33 2010-05-31 08:33

4 ปีที่ผ่านมาในหัวข้อ แต่มันอาจจะเป็นประโยชน์กับใครบางคน

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

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

ตอนนี้สาขาหลักของคุณคือ origin/master และคอมมิชชันใหม่ทั้งหมดอยู่ใน my_feature โปรดทราบว่า my_feature เป็นสาขาท้องถิ่นไม่ใช่สาขาระยะไกล

61
06 февр. คำตอบจะได้รับ fotanus 06 ก.พ. 2014-02-06 17:44 '14 เวลา 17:44 2014-02-06 17:44

หากคุณทำการเปลี่ยนแปลงไปแล้วคุณจะต้องบังคับการเปลี่ยนแปลงถัดไปหลังจากรีเซ็ต HEAD

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

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

ในกรณีบน Windows (ใช้บรรทัดคำสั่งของ Windows ไม่ใช่ Bash) มีสี่ตัวจริง ๆ ^^^^ แทนที่จะเป็นหนึ่งดังนั้น

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 คำตอบนั้นได้รับจาก Igor Zevaka ในวันที่ 31 พฤษภาคม 10 เวลา 9:11 2010-05-31 09:11

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

หากคุณเพิ่งทำผิดสาขาและไม่เปลี่ยนแปลงอะไรตั้งแต่นั้นมาและไม่ได้คลิกที่ repo คุณสามารถทำสิ่งต่อไปนี้:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

หมายเหตุ ในตัวอย่างข้างต้นฉันได้รับการแก้ไข 1 ครั้งด้วยการรีเซ็ต git HEAD ~ 1 แต่ถ้าคุณต้องการย้อนกลับ n คอมมิตคุณก็สามารถทำการรีเซ็ต git HEAD ~ n ได้

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

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

หมายเหตุ ฉันใช้เว็บไซต์นี้เป็นลิงค์ https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 คำตอบนั้นได้รับจาก Ali Mizan ในวันที่ 31 พฤษภาคม 2560 เวลา 0:51 2017-05-31 00:51

ดังนั้นถ้าสคริปต์ของคุณคือคุณผ่าน master แต่มีความหมายที่จะส่งผ่านไป another-branch (ซึ่งอาจมีหรือไม่มีอยู่แล้ว) แต่คุณยังไม่ได้คลิกเลยนี่เป็นเรื่องง่ายที่จะแก้ไข

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

ตอนนี้คำมั่นสัญญาทั้งหมดของคุณที่มีต่อ master จะอยู่ที่ another-branch อื่น

แหล่งที่มา: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Lorcan O'Neill ตอบกลับ 8 เม.ย. 2016-04-08 16:19 '16 เวลา 16:19 น. 2016-04-08 16:19

หากคุณพบปัญหานี้และคุณมี Visual Studio คุณสามารถทำสิ่งต่อไปนี้:

คลิกขวาที่สาขาของคุณและเลือก View History :

2019

05 апр. คำตอบนั้นให้ Trevor 05 apr 2017-04-05 02:39 '17 เวลา 2:39 2017-04-05 02:39

หากสาขาที่คุณต้องการใช้การเปลี่ยนแปลงของคุณมีอยู่แล้ว (ตัวอย่างเช่นเพื่อพัฒนาสาขา) ให้ทำตามคำแนะนำของ fotanus ด้านล่างจากนั้น:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

และแน่นอนคุณสามารถใช้ tempbranch หรือชื่อสาขาอื่น ๆ แทน my_feature หากคุณต้องการ

นอกจากนี้หากทำได้ให้ชะลอการแสดงข้อความป๊อปอัพ (นำไปใช้) จนกว่าคุณจะรวมกันในสาขาเป้าหมายของคุณ

0
24 авг. คำตอบนั้นได้รับจาก fbicknel 24 aug. 2016-08-24 01:15 '16 เวลา 1:15 น. 2016-08-24 01:15

คำถามอื่น ๆ เกี่ยวกับแท็ก หรือ ถามคำถาม