ลืม "git rebase --continue" และทำ "คอมมิต" แก้ไขอย่างไร?


112

ฉันกำลังเปลี่ยนรหัสในคอมไพล์ฉันมีข้อขัดแย้งในการผสาน ฉันแก้ไขข้อขัดแย้งและทำ:

git add

ณ จุดนี้ฉันลืมทำ:

git rebase --continue

ฉันเขียนโค้ดต่อไปและทำ:

git commit

สำหรับการเปลี่ยนแปลง ตอนนี้ฉันอยู่"no branch"และทำไม่ได้:

git rebase --continue 

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


# ตอนนี้ยังไม่เปิดสาขาใด ๆ ไม่มีอะไรให้กระทำ (ไดเรกทอรีการทำงานสะอาด)
Abhilash

คำตอบ:


4

แก้ไข : ดูคำตอบด้านล่างเพื่อดูว่าเป็นวิธีที่ง่ายกว่าสำหรับคุณหรือไม่ https://stackoverflow.com/a/12163247/493106


ฉันต้องลองดู แต่ฉันคิดว่านี่คือสิ่งที่ฉันจะทำ:

  1. แท็กคอมมิตล่าสุดของคุณ (หรือจด SHA1 ไว้ที่ไหนสักแห่งเพื่อไม่ให้ทำหาย): git tag temp
  2. git rebase --abort
  3. ทำการ rebase อีกครั้ง คุณจะต้องแก้ไขการรวมอีกครั้ง :(
  4. git rebase --continue
  5. git cherry-pick temp

ปัญหานี้คือคอมtempมิตของคุณอาจมีทั้งความละเอียดของการผสานและโค้ดใหม่ ดังนั้นมันอาจจะยุ่งยาก แต่ฉันจะลองดูว่ามันใช้ได้ไหม


คุณสามารถแท็กเช่น @MatrixFrog กล่าวหรือคุณสามารถบันทึกเป็นโปรแกรมแก้ไขได้เช่นกัน จากนั้นทำการยกเลิก rebase ตรวจสอบสถานะเพื่อให้แน่ใจว่า repo อยู่ในสถานะที่คุณรู้ว่าไม่มีปัญหาจากนั้นเริ่มการดึงข้อมูลและฐานข้อมูลใหม่
yasouser

18
อย่าทำแบบนี้ ดูคำตอบของ kirikaza ด้านล่างสำหรับวิธีที่ง่าย / สะอาดกว่ามาก อย่ายุ่งกับการเลือกเชอร์รี่และแก้ไขความขัดแย้งอีกเป็นครั้งที่สอง
tandrewnichols

4
@Abhilash โปรดยอมรับคำตอบของ kirikaza ฉัน (เช่นเดียวกับ tandrewnichols) ทำสิ่งนี้และมีวิธีที่ง่ายกว่ามาก (และดูเหมือนว่าอินเทอร์เน็ตจะเห็นด้วยเนื่องจากคำตอบนั้นมีการโหวตเพิ่มขึ้น 4 เท่า)
David Doria

ตอนนี้ได้รับการโหวตเพิ่มขึ้น 10 เท่า ... นอกจากนี้ให้ใช้ git rerere เพื่อจดจำการแก้ปัญหาความขัดแย้งของคุณ (มีประโยชน์เว้นแต่คุณจะทำมติที่ไม่ดีในบางครั้งซึ่งคุณไม่ต้องการให้จำ)
Ajax

217

git reset --soft HEAD^เพียงแค่ทำ มันย้ายตัวชี้ HEAD ไปยังพาเรนต์ แต่ยังคงโครงสร้างงานไว้และเพิ่มการเปลี่ยนแปลงการผสานลงในดัชนี คุณจึงสามารถทำการรีเบตต่อได้git rebase --continueเหมือนเดิม


1
สิ่งนี้ได้ผลโดยสิ้นเชิงและยังเป็นครั้งแรกที่ฉันพบการใช้ - ซอฟต์ ยินดีที่ได้ทราบวิธีการทำงานขอบคุณ!
mmocny

1
ฉันหวังว่าผู้คนจะเห็นการโหวตทั้งหมดของคำตอบนี้และทำตามคำแนะนำที่นี่!
Raghu

1
นี่คือสิ่งที่ฉันคิด (แต่อาจผ่านไปอย่างยากลำบากโดยบังเอิญ) ไม่แน่ใจว่ากำลังอัปเดต HEAD ระหว่างการรีเบสหรือไม่ ขอบคุณสำหรับการยืนยัน! ดีใจมากที่ฉันเลื่อนดูอีกเล็กน้อยก่อนที่จะยุ่งกับอาการปวดหัวข้างต้น
DeezCashews

ฉันแก้ไขคำตอบที่ยอมรับเพื่อใส่ลิงค์ลงที่นี่ - ฉันไม่เห็นคำตอบนี้จนกว่าฉันจะทำตามคำแนะนำด้านบน
xaxxon

0

ฉันพบปัญหาเดียวกันและที่แย่กว่านั้นคือฉันชดใช้ความผิดสามครั้งและหลังจากแก้ปัญหาความขัดแย้งในการกระทำครั้งที่สองฉันก็ "ตกลง" แทนที่จะเป็น "rebase --continue"

เป็นผลให้ฉันมีreflog gitนี้

เมื่อฉันใช้วิธีแก้ปัญหาของ kirikaza ฉันเพิ่งเปลี่ยนการคอมมิตครั้งที่สามไม่ใช่อันที่สองซึ่งเป็นปัญหา ..

อย่างที่คุณเห็น rebase เริ่มต้นด้วยการชำระเงินจากรีโมต / จุดเริ่มต้น / สาขาหลักจากนั้นใช้การคอมมิตสามอย่างของฉันที่ปรากฏเป็นการดำเนินการสามครั้งก่อนหน้า (ก่อนการชำระเงิน) ใน reflog

จากนั้นหากคุณต้องการเริ่มต้นใหม่จากฐานที่สะอาดก่อนการรีเบสคุณสามารถรีเซ็ตฮาร์ดเป็นแฮชได้ก่อนการชำระเงินของการดำเนินการรีเบส ในกรณีของฉัน (ดูรูป):

git reset --hard 859ed3c

จากนั้นคุณสามารถเริ่มต้นใหม่ git rebaseจากนั้นคุณสามารถเริ่มต้นใหม่


0

ฉันได้ทำการ rebased git, ความขัดแย้งที่ได้รับการแก้ไข, git เพิ่มไฟล์ที่มีความขัดแย้งและ (ผิดพลาด)

ฉันลองgit reset --soft HEAD^และgit reset --hardวิธีแก้ปัญหาที่ได้รับ แต่ไม่ได้ผลสำหรับฉัน

อย่างไรก็ตามgit rebase --abortมันใช้งานได้: ฉันพาฉันกลับไปก่อนที่จะเริ่มการปรับฐานด้วยโครงสร้างการทำงานที่สะอาด

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