สิ่งที่เกิดขึ้นในปัจจุบันคือคุณมีไฟล์บางชุดซึ่งคุณได้ลองผสานก่อนหน้านี้ แต่ไฟล์เหล่านั้นแสดงถึงความขัดแย้งที่ผสานเข้าด้วยกัน git add file.name && git commit -m "removed merge conflicts"
จะเป็นการดีถ้าหนึ่งได้รับการผสานความขัดแย้งเขาควรจะแก้ไขปัญหาด้วยตนเองและกระทำการเปลี่ยนแปลงโดยใช้ ขณะนี้ผู้ใช้รายอื่นได้อัปเดตไฟล์ที่เป็นปัญหาในพื้นที่เก็บข้อมูลของเขาและได้ผลักดันการเปลี่ยนแปลงของเขาไปที่ repo ทั่วไปต้นน้ำ
มันเกิดขึ้นที่การผสานของคุณขัดแย้งจาก (อาจ) การกระทำครั้งสุดท้ายไม่ได้รับการแก้ไขดังนั้นไฟล์ของคุณจะไม่ถูกผสานทั้งหมดและด้วยเหตุนี้การตั้งค่าสถานะU
( unmerged
) สำหรับไฟล์ ดังนั้นตอนนี้เมื่อคุณทำ a git pull
คอมไพล์กำลังทิ้งข้อผิดพลาดเนื่องจากคุณมีไฟล์บางเวอร์ชันซึ่งไม่สามารถแก้ไขได้อย่างถูกต้อง
git pull
เพื่อแก้ปัญหานี้คุณจะต้องแก้ปัญหาความขัดแย้งในการผสานในคำถามและเพิ่มและกระทำการเปลี่ยนแปลงก่อนที่คุณจะสามารถทำได้
ตัวอย่างการทำซ้ำและการแก้ไขปัญหา:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
ก่อนอื่นให้เราสร้างโครงสร้างที่เก็บ
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
ตอนนี้เราอยู่ใน repo_clone และถ้าคุณทำgit pull
มันจะทำให้เกิดความขัดแย้ง
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
หากเราเพิกเฉยต่อความขัดแย้งในโคลนและทำพันธะเพิ่มเติมในธุรกรรมซื้อคืนเดิมทันที
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
แล้วเราก็ทำgit pull
เราได้
repo_clone $ git pull
U file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
โปรดทราบว่าfile
ขณะนี้อยู่ในสถานะ unmerged และถ้าเราทำgit status
เราสามารถเห็นได้อย่างชัดเจน:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
ดังนั้นเพื่อแก้ไขปัญหานี้เราต้องแก้ไขความขัดแย้งที่เราไม่สนใจก่อนหน้านี้ก่อน
repo_clone $ vi file
และตั้งค่าเนื้อหาเป็น
text2
text1
text1
จากนั้นเพิ่มและดำเนินการเปลี่ยนแปลง
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts