ข้อผิดพลาดการรวมคอมไพล์


264

ฉันมีสาขาคอมไพล์ที่เรียกว่า9-sign-in-outมีรหัสการทำงานที่สมบูรณ์แบบและฉันต้องการที่จะกลายเป็นเจ้านาย ขณะนี้ฉันอยู่ในสาขาหลัก

$ git branch
9-sign-in-out
* master

ฉันกำลังพยายามเปลี่ยนเป็น9-sign-in-outสาขา แต่ไม่อนุญาตให้:

$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first

ความคิดใดที่ฉันจะเพิกเฉยต่อข้อผิดพลาดของสาขาหลักทั้งหมดและเปลี่ยนเป็น9-sign-in-outสาขาหลักได้ บางทีคอมไพล์rebase ? แต่ฉันไม่ต้องการที่จะสูญเสียรหัสใน9-sign-in-outสาขา


คุณหมายความว่าคุณไม่ต้องการสูญเสียรหัสที่ไม่ได้รับการยืนยันในการลงชื่อเข้าใช้ 9 ครั้งหรือไม่?
Mauvis Ledford

@Mauvis: ฉันยืนยันรหัสในการลงชื่อเข้าใช้สาขาแล้ว
Sayanee

คำตอบ:


531

เป็นเรื่องที่ควรทำความเข้าใจว่าข้อความแสดงข้อผิดพลาดเหล่านั้นมีความหมายอย่างไร - needs mergeและerror: you need to resolve your current index firstระบุว่าการผสานล้มเหลวและมีความขัดแย้งในไฟล์เหล่านั้น หากคุณตัดสินใจว่าการผสานที่คุณพยายามทำนั้นเป็นความคิดที่ไม่ดีคุณสามารถนำสิ่งต่าง ๆ กลับมาเป็นปกติได้ด้วย:

git reset --merge

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


เมื่อคุณจัดการกับมันด้วยเทคนิคใดคุณควรจะสามารถเช็คเอาท์9-sign-in-outสาขา ปัญหาที่เกิดขึ้นมีเพียงการเปลี่ยนชื่อของคุณ9-sign-in-outจะmasterได้รับการแนะนำในคำตอบของ wRARคือว่าถ้าคุณได้แชร์สาขาต้นแบบก่อนหน้านี้ของคุณกับคนนี้จะสร้างปัญหาสำหรับพวกเขาเพราะถ้าประวัติศาสตร์ของทั้งสองสาขาแยกออกมาคุณจะได้รับการตีพิมพ์เขียนใหม่ ประวัติศาสตร์

สิ่งสำคัญที่คุณต้องทำคือการรวมสาขาหัวข้อของคุณ9-sign-in-outเข้าไปmasterแต่เก็บรุ่นของไฟล์ในสาขาหัวข้อ คุณสามารถทำได้ด้วยขั้นตอนต่อไปนี้:

# Switch to the topic branch:
git checkout 9-sign-in-out

# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master

# Switch back to the master branch:
git checkout master

# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out

1
มาร์คในที่สุดฉันก็เข้าใจสิ่งที่คุณพูดหลังจากที่ฉันได้รับข้อผิดพลาดอีกครั้งเพื่อรวมตอนนี้ ฉันอย่างไรก็ตามมีข้อผิดพลาดนี้ :::::::::::::: Sayanee: twitter sweska $ git ข้อผิดพลาดหลักของการเช็คเอาต์: การเปลี่ยนแปลงในท้องถิ่นของคุณในไฟล์ต่อไปนี้จะถูกเขียนทับโดย checkout: webrat.log กรุณายอมรับ การเปลี่ยนแปลงของคุณหรือซ่อนพวกเขาก่อนที่คุณจะสามารถเปลี่ยนสาขา การแท้ง :::::::::::::::::: วิธีใดก็ตามที่จะใช้ webrat.log ในสาขาและทำให้มันผสานกับเจ้านายหรือไม่
Sayanee

1
@Sanee: นั่นเป็นข้อผิดพลาดที่แตกต่างกันเกิดขึ้นจากสถานการณ์ที่แตกต่างกันและมันจะดีกว่าที่จะถามคำถามใหม่เกี่ยวกับเรื่องนี้หากคุณสับสน (สั้น ๆ แม้ว่าคอมไพล์จะหยุดคุณจากการสลับสาขาเนื่องจากมันจะเขียนทับการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดwebrat.log)
Mark Longair

ฉันเคยเป็นเพียงแค่สิ่งทั้งหมดและ reclone แต่นี่คือดีกว่า
sudo

43
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master

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

8

ตามข้อเสนอแนะในgit status,

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

ฉันเคยgit addทำการผสานเสร็จแล้วก็git checkoutทำงานได้ดี



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