वर्तमान में क्या हो रहा है, कि आपके पास कुछ फ़ाइलों का एक सेट है, जिसे आपने पहले विलय करने की कोशिश की है, लेकिन उन्होंने मर्ज टकराव को फेंक दिया। आदर्श रूप से, यदि किसी को एक मर्ज संघर्ष मिलता है, तो उसे मैन्युअल रूप से हल करना चाहिए, और बदलाव का उपयोग करना चाहिए git add file.name && git commit -m "removed merge conflicts"
। अब, किसी अन्य उपयोगकर्ता ने अपनी रिपॉजिटरी पर विचाराधीन फाइलों को अपडेट किया है, और अपने परिवर्तनों को आम अपस्ट्रीम रेपो में धकेल दिया है।
ऐसा होता है, कि आपका मर्ज अंतिम प्रतिबद्ध से (शायद) हल नहीं हुआ है, इसलिए आपकी फ़ाइलों को सभी सही मर्ज नहीं किया गया है, और इसलिए U
( unmerged
) फ़ाइलों के लिए ध्वज। तो अब, जब आप एक करते हैं, तो 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
अब एक असंक्रमित राज्य में है और अगर हम एक करते हैं 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