คำตอบที่ให้มาไม่เหมาะเพราะพวกเขาต้องการงานที่ไม่มีความจำเป็นมากในการแก้ไขข้อขัดแย้งในการรวมหรือพวกเขาตั้งสมมติฐานมากเกินไปซึ่งมักเป็นเท็จ นี่คือวิธีการทำอย่างสมบูรณ์ ลิงค์ไปยังเว็บไซต์ของฉันเอง
คุณมีการเปลี่ยนแปลงใน uncommited my_branch
ที่คุณต้องการที่จะกระทำการโดยไม่กระทำการเปลี่ยนแปลงทั้งหมดจากmaster
my_branch
ตัวอย่าง
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
คำอธิบาย
เริ่มต้นด้วยการรวมmaster
เข้ากับสาขาของคุณเนื่องจากคุณจะต้องทำสิ่งนั้นในที่สุดและตอนนี้เป็นเวลาที่ดีที่สุดในการแก้ไขข้อขัดแย้ง
-u
ตัวเลือก (aka --include-untracked
) ในgit stash -u
ป้องกันคุณจากการสูญเสียไฟล์ที่ไม่ได้ติดตามเมื่อคุณทำต่อมาภายในgit clean -f -d
master
หลังจากgit checkout master
เป็นสิ่งสำคัญที่คุณไม่ทำgit stash pop
เพราะคุณจะต้องสะสมนี้ในภายหลัง หากคุณปรากฏที่เก็บที่สร้างขึ้นmy_branch
แล้วทำgit stash
ในmaster
คุณจะทำให้เกิดความขัดแย้งผสานโดยไม่จำเป็นเมื่อคุณใช้ที่เก็บในmy_branch
ภายหลัง
git reset
git stash apply
ทุกอย่างที่เกิดจากการ unstages ตัวอย่างเช่นไฟล์ที่ได้รับการแก้ไขในที่เก็บ แต่ไม่มีอยู่ในการmaster
จัดฉากว่าเป็น "ลบโดยเรา" ความขัดแย้ง
git checkout .
และ git clean -f -d
ทิ้งทุกสิ่งที่ไม่ได้ทำ: การเปลี่ยนแปลงทั้งหมดในไฟล์ที่ถูกติดตามและไฟล์และไดเรกทอรีที่ไม่ได้ติดตาม พวกเขาจะถูกบันทึกไว้แล้วในการสะสมและหากปล่อยทิ้งไว้ในที่จะทำให้เกิดความขัดแย้งในการผสานความจำเป็นเมื่อมีการสลับกลับไปmaster
my_branch
สุดท้ายgit stash pop
จะเป็นไปตามต้นฉบับmy_branch
และจะไม่ทำให้เกิดความขัดแย้งผสาน อย่างไรก็ตามหากที่เก็บข้อมูลของคุณมีไฟล์ที่ไม่ได้ติดตามซึ่งคุณได้กำหนดไว้ว่าจะใช้งานหลัก git จะบ่นว่า "ไม่สามารถเรียกคืนไฟล์ที่ไม่ได้ติดตามจากที่เก็บถาวร" ได้ ในการแก้ปัญหาความขัดแย้งนี้ลบไฟล์เหล่านั้นจากต้นไม้ที่ทำงานของคุณแล้วgit stash pop
, และgit add .
git reset