คำตอบที่ให้มาไม่เหมาะเพราะพวกเขาต้องการงานที่ไม่มีความจำเป็นมากในการแก้ไขข้อขัดแย้งในการรวมหรือพวกเขาตั้งสมมติฐานมากเกินไปซึ่งมักเป็นเท็จ นี่คือวิธีการทำอย่างสมบูรณ์ ลิงค์ไปยังเว็บไซต์ของฉันเอง
คุณมีการเปลี่ยนแปลงใน uncommited my_branchที่คุณต้องการที่จะกระทำการโดยไม่กระทำการเปลี่ยนแปลงทั้งหมดจากmastermy_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 -dmaster
หลังจากgit checkout masterเป็นสิ่งสำคัญที่คุณไม่ทำgit stash popเพราะคุณจะต้องสะสมนี้ในภายหลัง หากคุณปรากฏที่เก็บที่สร้างขึ้นmy_branchแล้วทำgit stashในmasterคุณจะทำให้เกิดความขัดแย้งผสานโดยไม่จำเป็นเมื่อคุณใช้ที่เก็บในmy_branchภายหลัง
git resetgit stash applyทุกอย่างที่เกิดจากการ unstages ตัวอย่างเช่นไฟล์ที่ได้รับการแก้ไขในที่เก็บ แต่ไม่มีอยู่ในการmasterจัดฉากว่าเป็น "ลบโดยเรา" ความขัดแย้ง
git checkout . และ git clean -f -dทิ้งทุกสิ่งที่ไม่ได้ทำ: การเปลี่ยนแปลงทั้งหมดในไฟล์ที่ถูกติดตามและไฟล์และไดเรกทอรีที่ไม่ได้ติดตาม พวกเขาจะถูกบันทึกไว้แล้วในการสะสมและหากปล่อยทิ้งไว้ในที่จะทำให้เกิดความขัดแย้งในการผสานความจำเป็นเมื่อมีการสลับกลับไปmastermy_branch
สุดท้ายgit stash popจะเป็นไปตามต้นฉบับmy_branchและจะไม่ทำให้เกิดความขัดแย้งผสาน อย่างไรก็ตามหากที่เก็บข้อมูลของคุณมีไฟล์ที่ไม่ได้ติดตามซึ่งคุณได้กำหนดไว้ว่าจะใช้งานหลัก git จะบ่นว่า "ไม่สามารถเรียกคืนไฟล์ที่ไม่ได้ติดตามจากที่เก็บถาวร" ได้ ในการแก้ปัญหาความขัดแย้งนี้ลบไฟล์เหล่านั้นจากต้นไม้ที่ทำงานของคุณแล้วgit stash pop, และgit add .git reset