ในการเลือกรวมไฟล์จากสาขาหนึ่งเข้ากับสาขาอื่นให้เรียกใช้
git merge --no-ff --no-commit branchX
ซึ่งbranchX
เป็นสาขาที่คุณต้องการผสานเข้าจากสาขาในปัจจุบัน
--no-commit
ตัวเลือกที่จะเวทีไฟล์ที่ได้รับการควบรวมกิจการโดย Git ไม่จริงพวกเขากระทำ นี่จะทำให้คุณมีโอกาสที่จะแก้ไขไฟล์ที่ถูกผสานอย่างไรก็ตามคุณต้องการและคอมมิทด้วยตัวคุณเอง
ขึ้นอยู่กับว่าคุณต้องการรวมไฟล์อย่างไรมีสี่กรณี:
1) คุณต้องการผสานที่แท้จริง
ในกรณีนี้คุณยอมรับไฟล์ที่ถูกผสานในลักษณะที่ Git รวมเข้าด้วยกันโดยอัตโนมัติ
2) มีไฟล์บางไฟล์ที่คุณไม่ต้องการรวม
ตัวอย่างเช่นคุณต้องการเก็บเวอร์ชันไว้ในสาขาปัจจุบันและไม่ต้องสนใจเวอร์ชันในสาขาที่คุณกำลังผสาน
หากต้องการเลือกเวอร์ชันในสาขาปัจจุบันให้รัน:
git checkout HEAD file1
สิ่งนี้จะดึงเวอร์ชันของfile1
ในสาขาปัจจุบันและเขียนทับfile1
automerged โดย Git
3) ถ้าคุณต้องการรุ่นใน branchX (และไม่ใช่ผสานจริง)
วิ่ง:
git checkout branchX file1
นี้จะเรียกรุ่นของfile1
ในbranchX
และเขียนทับfile1
อัตโนมัติรวมโดย Git
4) file1
กรณีสุดท้ายคือถ้าคุณต้องการที่จะเลือกการผสานเพียงเฉพาะใน
ในกรณีนี้คุณสามารถแก้ไขการแก้ไขfile1
โดยตรงอัปเดตเป็นอะไรก็ได้ที่คุณต้องการให้เวอร์ชันfile1
กลายเป็นแล้วคอมมิท
หาก Git ไม่สามารถรวมไฟล์โดยอัตโนมัติไฟล์นั้นจะรายงานว่าเป็น " unmerged " และสร้างสำเนาที่คุณจะต้องแก้ไขข้อขัดแย้งด้วยตนเอง
หากต้องการอธิบายเพิ่มเติมเกี่ยวกับตัวอย่างสมมติว่าคุณต้องการรวมbranchX
เข้ากับสาขาปัจจุบัน:
git merge --no-ff --no-commit branchX
จากนั้นคุณเรียกใช้git status
คำสั่งเพื่อดูสถานะของไฟล์ที่แก้ไข
ตัวอย่างเช่น:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
ที่ไหนfile1
, file2
และfile3
เป็นไฟล์ที่คอมไพล์ได้ประสบความสำเร็จอัตโนมัติรวม
สิ่งนี้หมายความว่าการเปลี่ยนแปลงในmaster
และbranchX
สำหรับทั้งสามไฟล์นั้นได้ถูกรวมเข้าด้วยกันโดยไม่มีข้อขัดแย้ง
คุณสามารถตรวจสอบวิธีการผสานที่ได้กระทำโดยการทำงานgit diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
หากคุณพบว่าการรวมที่ไม่พึงประสงค์บางอย่างนั้นคุณทำได้
- แก้ไขไฟล์โดยตรง
- บันทึก
git commit
หากคุณไม่ต้องการผสานfile1
และต้องการเก็บเวอร์ชันไว้ในสาขาปัจจุบัน
วิ่ง
git checkout HEAD file1
หากคุณไม่ต้องการที่จะผสานfile2
และต้องการรุ่นเท่านั้นbranchX
วิ่ง
git checkout branchX file2
หากคุณต้องการfile3
ถูกผสานโดยอัตโนมัติอย่าทำอะไรเลย
Git ได้รวมตอนนี้
file4
ด้านบนเป็นการรวมที่ล้มเหลวโดย Git ซึ่งหมายความว่ามีการเปลี่ยนแปลงทั้งสองสาขาที่เกิดขึ้นในบรรทัดเดียวกัน ที่นี่คุณจะต้องแก้ไขข้อขัดแย้งด้วยตนเอง คุณสามารถยกเลิกการผสานที่ทำได้โดยแก้ไขไฟล์โดยตรงหรือรันคำสั่งเช็คเอาต์สำหรับเวอร์ชันในสาขาที่คุณต้องการfile4
เป็น
git commit
สุดท้ายอย่าลืมให้