จะทำให้การเปลี่ยนแปลง“ ของพวกเขา” อยู่ตรงกลางของการรีบูต Git ที่ขัดแย้งกันได้อย่างไร?


349

ฉันมีสาขาที่ขัดแย้งกัน branch2 แยกจาก branch1

สมมติว่าเมื่อ rebasing branch2ในปัจจุบันbranch1ในขณะที่แก้ปัญหาความขัดแย้งผมตัดสินใจที่จะใช้บางส่วน (ไม่ทั้งหมด) ของ (เช่น "ของ" branch1) ไฟล์ตามที่เป็น ฉันจะทำอย่างไร

ฉันเหนื่อย:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java

41
หมายเหตุ: หากคุณกำลังรีบูต branch2 ไปที่ branch1 การเล่นซ้ำจะเกิดขึ้นเมื่อเทียบกับ branch1 ดังนั้น "ของพวกเขา" คือ branch2 และ "ours" เป็น branch1 git.661346.n2.nabble.com/…
Mr Fooz

2
ดูเพิ่มเติมที่github.com/git/git/commit/…
VonC

1
สิ่งนี้ทำให้ฉันต้องทำงานหนักประมาณ 20 ชั่วโมง ฉันคิดอย่างสุจริตว่า "ของเรา" จะเป็นสำเนาที่ใช้งานได้เสมอ
Theodore R. Smith

คำตอบ:


496

คุณต้องการใช้:

git checkout --ours foo/bar.java
git add foo/bar.java

หากคุณ rebase สาขาfeature_xกับmaster(เช่นการทำงานgit rebase masterในขณะที่สาขาfeature_x) ระหว่าง rebasing oursหมายถึงmasterและเพื่อtheirsfeature_x

ตามที่ระบุไว้ในเอกสารgit-rebase :

โปรดทราบว่าการรวม rebase จะทำงานโดยการเล่นซ้ำแต่ละการกระทำจากสาขาที่ทำงานอยู่ด้านบนของสาขา ด้วยเหตุนี้เมื่อมีข้อขัดแย้งในการผสานเกิดขึ้นด้านที่รายงานว่าเป็นของเราคือซีรีย์ที่ถูกปฏิเสธซึ่งเริ่มต้นด้วย <up สตรีม> และพวกเขาเป็นสาขาที่ทำงาน กล่าวอีกนัยหนึ่งคือสลับข้าง

สำหรับรายละเอียดเพิ่มเติมอ่านหัวข้อนี้


0

หากคุณต้องการดึงไฟล์เฉพาะจากสาขาอื่นให้ทำ

git checkout branch1 -- filenamefoo.txt

สิ่งนี้จะดึงเวอร์ชันของไฟล์จากสาขาหนึ่งไปยังทรีปัจจุบัน


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