คำตอบนำอธิบายถึงวิธีการใช้การเปลี่ยนแปลงจากการกระทำที่เฉพาะเจาะจงกับสาขาปัจจุบัน ถ้านั่นคือสิ่งที่คุณหมายถึงโดย "วิธีการรวม" แล้วใช้เชอร์รี่เลือกตามที่พวกเขาแนะนำ
แต่ถ้าคุณต้องการผสานเช่นคุณต้องการคอมมิทใหม่กับผู้ปกครองสองคน - คอมมิชชันเดิมที่มีอยู่ในสาขาปัจจุบันและคอมมิชชันที่คุณต้องการใช้การเปลี่ยนแปลงจากนั้นเชอร์รี่เลือกจะไม่ทำเช่นนั้น
การมีประวัติการผสานจริงอาจเป็นที่ต้องการตัวอย่างเช่นหากกระบวนการสร้างของคุณใช้ประโยชน์จากบรรพบุรุษของ git ในการตั้งค่าสตริงเวอร์ชันโดยอัตโนมัติตามแท็กล่าสุด (โดยใช้git describe
)
คุณสามารถทำได้จริงgit merge --no-commit
และปรับดัชนีด้วยตนเองเพื่อลบการเปลี่ยนแปลงที่คุณไม่ต้องการแทน
สมมติว่าคุณอยู่ในสาขาA
และคุณต้องการที่จะรวมการกระทำที่ปลายสาขาB
:
git checkout A
git merge --no-commit B
ตอนนี้คุณกำลังจัดตั้งขึ้นเพื่อสร้างกระทำกับพ่อแม่ทั้งสองที่กระทำในปัจจุบันของเคล็ดลับและA
B
อย่างไรก็ตามคุณอาจมีการเปลี่ยนแปลงมากกว่าที่คุณต้องการรวมถึงการเปลี่ยนแปลงจากข้อผูกพันก่อนหน้านี้ในสาขา B คุณต้องยกเลิกการเปลี่ยนแปลงที่ไม่ต้องการเหล่านี้แล้วส่ง
(อาจมีวิธีง่ายๆในการตั้งค่าสถานะของไดเรกทอรีทำงานและดัชนีกลับไปทางก่อนที่จะผสานเพื่อให้คุณมีกระดานชนวนที่สะอาดเพื่อที่จะเลือกความมุ่งมั่นที่คุณต้องการตั้งแต่แรก ฉันไม่ทราบวิธีการบรรลุกระดานชนวนสะอาดgit checkout HEAD
และgit reset HEAD
ทั้งสองจะลบสถานะผสานเอาชนะวัตถุประสงค์ของวิธีนี้)
ดังนั้นเลิกทำการเปลี่ยนแปลงที่ไม่ต้องการด้วยตนเอง ตัวอย่างเช่นคุณสามารถ
git revert --no-commit 012ea56
สำหรับการกระทำที่ไม่พึงประสงค์แต่ละ012ea56
ครั้ง
เมื่อคุณปรับสิ่งต่าง ๆ เสร็จแล้วให้สร้างการกระทำของคุณ:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
ตอนนี้คุณมีเพียงการเปลี่ยนแปลงที่คุณต้องการและต้นไม้ตระกูลแสดงให้เห็นว่าคุณรวมทางเทคนิคจาก B