मर्ज के बाद कमिट पर त्रुटि - घातक: मर्ज के दौरान आंशिक कमिट नहीं कर सकता


280

मैं git pullएक संघर्ष में समाप्त हुआ। मैंने संघर्ष को हल किया और अब सबकुछ ठीक है (मैंने मेरिजटूल का भी इस्तेमाल किया)।

जब मुझे git commit file.php -m "message"त्रुटि मिलती है तो मैं हल की गई फ़ाइल को कम कर देता हूं:

fatal: cannot do a partial commit during a merge.

इससे पहले कि मैं एक ही मुद्दा था और -aपूरी तरह से काम कर रहा था । मुझे लगता है कि यह सही तरीका नहीं है क्योंकि मैं सभी बदलाव नहीं करना चाहता। मैं अलग-अलग टिप्पणियों के साथ अलग से फाइल करना चाहता हूं। मैं उसे कैसे कर सकता हूँ? मर्ज के बाद उपयोगकर्ताओं को अलग से फाइल करने की अनुमति क्यों नहीं दी जाती है? मुझे इस समस्या का संतोषजनक उत्तर नहीं मिला।


5
और आप जानते हैं, git प्रदर्शन के लिए "पूर्ण प्रतिबद्ध" रिटर्न लगभग कुछ भी उपयोगी नहीं है। जीआईटी के मैन पेज से एक भी प्रासंगिक दस्तावेज नहीं। यह एक ऐसा दयनीय उपकरण है।
jww

6
@Torek - Git द्वारा बनाई गई एक और गड़बड़ के बारे में बात करते हैं ... यह इतना मुश्किल क्यों है कि भगवान ने किसी अन्य शाखा से एक विवादित फ़ाइल की जांच करना मुश्किल है, इसलिए संघर्ष को टाल दिया जाता है, इसे इस शाखा में जोड़ें और फिर इसे प्रतिबद्ध करें ??? और डब्ल्यूटीएफ एक आंशिक प्रतिबद्ध है? मुझे इस पर कोई दस्तावेज नहीं मिल रहा है ... उपयोगकर्ता नीचे दिए गए अनुमानों की कोशिश करने के लिए मजबूर हैं ...
jww

तुमने ये कैसे किया? मेरा एक संघर्ष है और मैं कुछ नहीं कर सकता
आर

जवाबों:


442

मैंने पाया कि कमेंट में "-i" जोड़ना मेरे लिए इस समस्या को ठीक करता है। -I मूल रूप से कमिट करने से पहले अतिरिक्त फ़ाइलों को स्टेज करने के लिए कहता है। अर्थात्:

git commit -i myfile.php

18
क्या Stage additional filesमतलब है?
jcalfee314

9
@ jcalfee314 git में मंचन के लिए फाइल को कमिट करना है। इस विशेष स्थिति में यह फाइल को कमांड लाइन के माध्यम से चरणबद्ध करता है। -I ध्वज का उपयोग ज्यादातर तब किया जाता है जब आप मर्ज का समापन कर रहे होते हैं। आप यहाँ के बारे में और अधिक पढ़ें ।
मिकेलहलेन

4
@ jcalfee314 मैंने दस्तावेज़ीकरण की जाँच की और यह कहता है कि "अब तक के मंचन की सामग्री के लिए प्रतिबद्ध होने से पहले, कमांड लाइन पर दिए गए रास्तों की सामग्री को भी चरणबद्ध करें। यह आमतौर पर आप तब तक नहीं चाहते हैं जब तक कि आप एक संघर्ष विलय का समापन नहीं कर रहे हैं" । मेरा अनुमान है कि इस शर्त के तहत, मचान क्षेत्र में किसी प्रकार की असंगति है जिसे हल नहीं किया जा सकता है git add, जो git commitविफल हो जाता है। जोड़ने के -iलिए एक ही समय में जोड़ने और प्रतिबद्ध करने के लिए कहेंगे। मुझे अभी भी यकीन नहीं है कि क्यों लेकिन यह समझ में आता है।
जॉनस्लोकेन

5
खुद की तरह नोज के लिए, आपको यह त्रुटि भी मिलेगी यदि आप एक संदेश की कोशिश करते हैं जिसमें बिना उद्धरण के रिक्त स्थान शामिल हैं। उदाहरण के लिए। [git कमिट -म वन टू थ्री] Correct: [git कमिट-एम "एक दो तीन"]
स्किचन

2
@ स्किचन की टिप्पणी मेरे लिए टिकट थी।
तेहबरीदोन

106
git commit -am 'Conflicts resolved'

इसने मेरे लिए काम किया। आप यह भी कोशिश कर सकते हैं।


1
कमाल है, मैं यह नहीं जानता था!
जीनवल्जेन

11
इससे सभी संशोधित फाइलें कमिट में आ जाती हैं, यहां तक ​​कि जो अस्थिर हैं वे भी वांछनीय नहीं हो सकते हैं। उपयोगकर्ता
चेस सैंडमैन

4
यह वही है जो उपयोगकर्ता पूछ रहा है कि ऐसा न करें, जो सभी फ़ाइलों को करने से बचने के लिए है।
माइकल

33

आप git commit -iज्यादातर मामलों के लिए उपयोग कर सकते हैं लेकिन अगर यह काम नहीं करता है

आपको करने की आवश्यकता है git commit -m "your_merge_message"। मर्ज संघर्ष के दौरान आप एक एकल फ़ाइल को मर्ज नहीं कर सकते, इसलिए आपको इसकी आवश्यकता है

  1. चरण केवल विवादित फ़ाइल ( git add your_file.txt)
  2. git commit -m "your_merge_message"

16

आपको संभवतः किसी ऐसी चीज़ में संघर्ष हुआ है जिसे आपने प्रतिबद्ध नहीं किया है। git आपको स्वतंत्र रूप से चीजें करने नहीं देगा (क्योंकि यह मर्ज का सभी हिस्सा है, मुझे लगता है), इसलिए आपको git addउस फ़ाइल की आवश्यकता है और फिर git commit -m "Merge conflict resolution"। आपके लिए -iफ़्लैग git commitऐड करता है।


5
1.9.0 में नहीं - commit -iकाम किया, लेकिन नहींgit add; git commit
लीजी

14

मुझे यह तब मिला जब मैं -mअपने मग कमिट में भूल गया जब एक गेट मर्ज संघर्ष को हल कर रहा था।

git commit "commit message"

होना चाहिए

git commit -m "commit message"

2
आह आह! मैं फिर भूल गया!
user2705463

9

जैसा कि त्रुटि संदेश कहता है कि आप मर्ज के बाद आंशिक कमिट नहीं कर सकते। सिर्फ file.phpबदलाव करने के बजाय आपको सभी बदलाव करने चाहिए।

यह काम करना चाहिए।

git commit -m "Fixing merge" 

धन्यवाद, इसने मदद की
नरेन्द्र पाण्डेय

मेरे लिए काम किया-जैसा है
शशांक बोदखे

6

क्रिया के बीच में आपका मर्ज रुक गया। आपको अपनी फ़ाइलों को जोड़ना चाहिए, और फिर 'कमिट कमिट':

git add file_1.php file_2.php file_3.php git commit

चियर्स


5

यदि आप पूरी चेरी-पिकिंग को कम करना चाहते हैं और जो भी सेट करना चाहते हैं, उसमें फाइलें भरना चाहते हैं,

git reset --soft <ID-OF-THE-LAST-COMMIT>

आपको वहाँ पहुँचाता है

नरम रीसेट क्या करता है यह सूचक को वर्तमान HEAD को इंगित करने के लिए उस कदम पर ले जाता है जो आपने (ईश) को दिया था, लेकिन फाइलों में परिवर्तन नहीं करता है। हार्ड रीसेट पॉइंटर को स्थानांतरित करेगा और उस कमिट (ईश) में राज्य की सभी फाइलों को भी वापस कर देगा। इसका मतलब है कि सॉफ्ट रीसेट के साथ आप मर्ज स्थिति को साफ़ कर सकते हैं लेकिन वास्तविक फ़ाइलों में परिवर्तन को बनाए रख सकते हैं और फिर अपनी पसंद के अनुसार व्यक्तिगत रूप से प्रत्येक को प्रतिबद्ध या रीसेट कर सकते हैं।


क्या आप इसे और अधिक समझा सकते हैं? यह शायद वही है जिसकी मुझे आवश्यकता है, लेकिन मैं इसका पालन नहीं करता हूं कि यह कैसे काम करेगा ... यहां सभी उत्तर सिर्फ 'फाइलें जोड़ें, फिर प्रतिबद्ध!' हैं, लेकिन यह इतना स्पष्ट है; मैं यहाँ हूँ कारण यह है कि मैं उन फ़ाइलों को जोड़ने से पहले नहीं करना चाहता। -_-;
काइल बेकर

यह सहायता करता है। धन्यवाद। :)
काइल बेकर

5
  1. अपनी परियोजना निर्देशिका पर जाएं
    1. छिपी हुई फ़ाइलें प्रदर्शित करें (.it फ़ोल्डर दिखाई देगा)
    2. खुला .git फ़ोल्डर
    3. MERGE_HEAD निकालें
    4. फिर से कमिट करें
    5. अगर git ने आपको बताया है कि git लॉक हो गया है। .it फ़ोल्डर में वापस जाएं और index.lock को हटा दें
    6. इस बार फिर से सब कुछ ठीक चलेगा।

महान! वह मेरे लिए काम करेगा। वैसे अगर MacOS पर, टर्मिनल से आप `ओपन .it` को कॉल कर सकते हैं, तो डायन खोजक में '.git' कंटेंट
tontonCD

यह मेरे लिए भी काम करता है। इसे उत्तर के रूप में स्वीकार किया जाना चाहिए।
वंदू

3

अपने लिए यह सोर्सट्री में तब हुआ जब मैंने सभी फाइलों को हल करने से पहले मर्ज करने की कोशिश की। मैंने तब हल की गई अंतिम फ़ाइल को चिह्नित किया था और फिर भी इसने मुझे यह त्रुटि दी थी जब मैं प्रयास कर रहा था। मैंने SourceTree को बंद कर दिया और इसे फिर से खोल दिया, और फिर इसने ठीक किया।


1
धन्यवाद, लेकिन दुर्भाग्य से यह मेरे लिए काम नहीं किया। वार्षिक रूप से, मुझे एक दृश्य-निजी के साथ-साथ मर्ज भी करना था, इससे पहले कि मैं मर्ज कर दूं।
कॉक्सी जूल

3

मैंने इसे पूरी तरह से हल कर लिया अलग दृष्टिकोण के किया, केवल Xcode के सोर्स कंट्रोल का उपयोग करके।

पृष्ठभूमि: एक अन्य टीम ने रिमोट गिट रिपॉजिटरी (बीनस्टॉक के माध्यम से) में परिवर्तन किया। मेरे अंत में, .xcodeproj फाइलें अलग-अलग निर्देशिका के अंतर्गत आईं, और परिवर्तन नहीं हुए। बाद में, जब मैंने कमिट करने की कोशिश की, तो मुझे Xcode में ट्री कंफ्लिक्ट एरर मिला।

ट्री कंफर्ट स्क्रीनशॉट

Xcode का सही उपयोग करना लगभग असंभव होने के कारण, मैंने .xcodeprojफ़ाइल को Git सर्वर से डाउनलोड किए गए संस्करण से बदल दिया । परिणाम ... Xcode परियोजना को स्पष्ट करने के लिए दिखाई दिया, हालांकि भ्रष्ट पुल के सभी अपडेट मेरे द्वारा किए गए परिवर्तनों के रूप में दिखाई दे रहे थे और एक प्रतिबद्धता के लिए मंचित थे।

इन सभी मॉड्स और एडेड फाइलों को देखें

हालाँकि जब कमिट करने की कोशिश की गई, तो मुझे वही "घातक: प्राप्त हुआ जो एक मर्ज के दौरान आंशिक कमिट नहीं कर सकता" त्रुटि, यहां चर्चा की गई।

यहां बताया गया है कि मैंने इस समस्या को कैसे हल किया ... (अब, समझें कि मैं एक धोखेबाज़ प्रोग्रामर हूं, इसलिए मुझे कुछ समझ की कमी हो सकती है ... लेकिन मेरी अज्ञानता ने मुझे ऐसा करने का दूसरा तरीका खोजने का नेतृत्व किया।) सबसे पहले, मैंने अपने गुरु का क्लोन बनाया। द्वितीयक शाखा में शाखा और उस शाखा में बदल गया। फिर मैंने एक वर्किंग कॉपी बनाई और डायरेक्टरी को उस मूल प्रोजेक्ट डायरेक्टरी के बाहर उस वर्किंग कॉपी में रख दिया। (मुझे नहीं पता कि क्या यह आवश्यक था, लेकिन इसका क्या मैंने जैसा मैंने अन्य समस्या निवारण तकनीकों को पढ़ा था।) फिर मैंने शाखाओं को मास्टर में बदल दिया, जहां मुझे एहसास हुआ कि मेरी सभी चरणबद्ध फाइलें (प्रतिबद्ध में परिवर्तन) चली गईं। यह सुनिश्चित करने के लिए कि सभी फाइलें दूसरे पक्ष द्वारा किए गए नवीनतम परिवर्तनों के लिए अपडेट की गई थीं, मैंने एक नई शाखा बनाई, जिसे थर्डब्रांच कहा जाता है, जिसने सभी फाइलों को डुप्लिकेट कर दिया है, इसे Git सर्वर पर धकेल दिया गया और बीनस्टॉक ने मास्टर ब्रांच के मेरे सर्वर संस्करण की तुलना थर्डब्रांच ब्रांच I पुशड (लाइन द्वारा लाइन) से की, और दूसरे पक्ष द्वारा सभी परिवर्तन मेरे Xcode पर मौजूद थे। इसका मतलब यह था कि मेरे मास्टर रिपॉजिटरी और गिट मास्टर रिपॉजिटरी एक ही थे, जो सत्यापित करता है कि मैंने केवल Xcode का उपयोग करके समस्या का समाधान किया है।

मुझसे यह मत पूछिए कि मैंने अभी जो वर्णन किया है, उससे परे ... और निश्चित रूप से मेरे द्वारा छोड़े गए अंतराल को भरें। मैं इस पर नया हूँ और मुझे सब कुछ समझ नहीं आ रहा है। हो सकता है कि एक अनुभवी प्रोग्रामर अप्रासंगिक जानकारी को प्रासंगिक से अलग कर सके और इस तकनीक को और अधिक स्पष्ट रूप से फिर से बना सके, जो कि मैं इसे पोस्ट कर रहा हूं।

यह डुप्लिकेट प्रश्न का डुप्लिकेट उत्तर है जैसा कि: विफल Xcode Git मर्ज अटक गया है


2
कृपया डुप्लिकेट उत्तर पोस्ट न करें। जबकि अंतर्निहित समस्या समान हो सकती है, आपका उत्तर बहुत अधिक विशिष्ट समस्या के लिए है और केवल इस सामान्य प्रश्न के उत्तर को बादलों के लिए है। मुझे लगता है कि इस मामले में उस प्रश्न के लिए एक टिप्पणी जिसमें आप अपने मूल उत्तर से लिंक करते हैं, अधिक उपयुक्त है।
फुकुचू

2

एक मर्ज के दौरान Git सभी प्रकार के कारणों के लिए मूल शाखाओं का ट्रैक रखना चाहता है। आप जो करना चाहते हैं वह मर्ज नहीं है क्योंकि गिट इसे देखता है। आप संभवतः मैन्युअल रूप से एक रिबेस या चेरी-पिक करना चाहेंगे।


1
मैंने पहले कभी रिबास या चेरी-पिक का उपयोग नहीं किया था, मैं अभी मैनुअल के माध्यम से भाग गया था, तो आप क्या सुझाव देंगे, संघर्षों के विलय के बाद "गिट रिबेस मास्टर" काम करेगा?
pMan

1
यह एक समानांतर वर्कफ़्लो है। Stackoverflow.com/questions/804115/git-rebase-vs-git-merge को मूल रूप से देखें , यदि आप चाहते हैं कि "मर्ज" अलग हो जाए तो इसके बजाय आप लक्षित शाखा के अंत में स्रोत शाखा को रिबास करें।
तल्जो

1
बस प्रत्येक व्यक्ति फ़ाइल को जोड़ने के बिना फिर एक -a प्रतिबद्ध।
पीटर डेविस

4
आपने वास्तव में प्रश्न का उत्तर नहीं दिया, बल्कि केवल और अधिक खोज करने के लिए दिया। अब हमें यह जानना होगा कि "चेरी पिकिंग" और "रिबास क्या है"।
ftrotter

2
मुझे आश्चर्य है कि इस जवाब को वोट क्यों दिया गया। मुझे हमेशा बच्चे की जिज्ञासा थी जब कोई मुझे ऐसी चीजें बताता है जो मैं पहले कभी नहीं जानता था। जैसा कि मैंने ऊपर टिप्पणी की थी, अब मुझे चेरी पिक और रीबेस के बारे में पता है। क्या वह प्रगतिशील / सहायक नहीं था?
pMan

2

git commit -i -m 'merge message'मेरे लिए काम नहीं किया। यह कहा:

fatal: No paths with --include/--only does not make sense.

FWIW, मैं इस संबंधित प्रश्न के माध्यम से यहाँ आया क्योंकि मुझे यह संदेश मिल रहा था:

fatal: You have not concluded your merge (MERGE_HEAD exists).

मैंने मेरिजटूल की भी कोशिश की, जो कहा No files need merging। बहुत ज्यादा उलझन! तो MERGE_HEAD एक फ़ाइल में नहीं है जिसे विलय की आवश्यकता है- ??

अंत में, मैंने केवल संशोधित फ़ाइलों को जोड़ने के लिए इस ट्रिक का उपयोग किया (मेरे पेड़ में सभी फाइलें जोड़ना नहीं चाहता था, क्योंकि मेरे पास कुछ है जो मैं अनट्रैकड रखना चाहता हूं):

git ls-files -m | xargs git add

तब मैं अंत में (!) करने में सक्षम था और धक्का दिया। यकीन है कि अच्छा होगा अगर git ने आपको इन परिस्थितियों में क्या करना है, इसके बारे में बेहतर संकेत दिए हैं।


1

यदि यह स्रोत ट्री में है , तो हमें स्पष्ट रूप से एक फ़ाइल को चिह्नित करना चाहिए, जैसा कि संघर्षों के हल होने के बाद हल किया गया है। उस फ़ाइल का चयन करें जिसे बस बिना किसी विरोध के हल किया गया था। फिर क्रिया -> संकल्प संघर्ष -> मार्क हल । यदि आपके पास एकाधिक फ़ाइलें हैं, तो सभी के लिए समान करें। अभी कमेट करें।


1

सभी टिप्पणियों को पढ़ने के बाद। यह मेरा संकल्प था:
मुझे इसे फिर से प्रतिबद्ध करने के लिए "जोड़ना" था:

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html

1

यदि आप स्रोत ट्री या अन्य GUI का उपयोग कर रहे हैं, तो सुनिश्चित करें कि सभी फाइलें (मर्ज के बाद) चेक की गई हैं।


0

कभी-कभी मर्ज के दौरान, यदि टकराव उत्पन्न होता है और ऐसे डेल्टा होते हैं, जिन्हें मैनुअल रिज़ॉल्यूशन की आवश्यकता होती है। ऐसी स्थिति में उल्लिखित फ़ाइलों के लिए मैनुअल रिज़ॉल्यूशन को ठीक करें।

अब यदि आप जारी करते हैं,

git status Lib/MyFile.php

आपको आउटपुट जैसा दिखाई देगा

On branch warehouse
Your branch and 'origin/warehouse' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    modified:   Lib/MyFile.php

चूंकि, आपने पहले ही कमिट का मंचन किया है, इसलिए आपको सिर्फ इश्यू की जरूरत है

git commit

और आपका कमिटमेंट बिना किसी इश्यू के हो जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.