git चेरी-पिक काम नहीं कर रहा है


110

मैं मास्टर से कमिटमेंट लेने और इसे वर्तमान उत्पादन शाखा में लाने की कोशिश कर रहा हूं। हालाँकि, जब मैं निष्पादित करता हूं, तो मुझे git cherry-pick <SHA-hash>यह संदेश मिलता है:

# On branch prod_20110801
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#   site/test-result/
 nothing added to commit but untracked files present (use "git add" to track)
 The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

नोट: मैंने एक रीसेट और रीसेट रीसेट करने की कोशिश की है - HEAD ^, और न ही कुछ भी बदलने के लिए प्रतीत होता है।

मैं उलझन में हूं कि यह मेरे लिए काम क्यों नहीं कर रहा है।

किसी भी अंतर्दृष्टि, सलाह, या यह कैसे हल करने के बारे में विचार उपयोगी होगा ~!


मेरे साथ ऐसा तब हुआ जब मैंने गलती से गलत कमिटमेंट लेने की कोशिश की। कभी-कभी गिट का उपयोग करते समय होता है।
cst1992

जवाबों:


141

Git चेरी-पिक को नो-ऑप के रूप में हल कर रहा है - उस प्रतिबद्ध द्वारा शुरू किए गए सभी परिवर्तनों को आपकी वर्तमान शाखा द्वारा कुछ प्रतिबद्ध द्वारा प्रस्तुत किया गया है। (या यही वह बात है, जो वैसे भी सोचता है।) सत्यापित करें कि आप जिस चेरी-पिकिंग हैं, वह पहले से ही किसी भी तरह विलय नहीं हुई है, या तो एक उचित मर्ज, रीबेस / चेरी-पिक, या टुकड़ा-टुकड़ा पैच। ( git show <commit-id>अंतर देखने के लिए उपयोग करें ।)


16
आपकी सलाह के लिए धन्यवाद, यह पता चलता है कि चेरी-पिक पहले से ही हो चुकी थी और मुझे यह करने की ज़रूरत थी कि इसे गीथब पर धकेल दिया जाए।
जे टेलर

ठीक है, मुझे यह महसूस नहीं हुआ कि यह कमिट-आईडी दी गई फ़ाइलों की सामग्री की जाँच कर रहा था। मैं लॉग-इन में कमिट-आईडी की तलाश में था और यह नहीं मिला। यह पता चला कि यह पहले ही विलय कर दिया गया था।
मपरज़

Unfortunatelly, यह प्रश्न में समस्या का एकमात्र कारण नहीं है। मैंने ठीक वैसी ही स्थिति प्राप्त की है जब मैंने प्रतिबद्ध किया था, जो कुछ पहले की प्रतिबद्धताओं का सम्मान करता है, और जब मैंने चेरी को दूसरी शाखा में चुना, तो इतिहास में यह नहीं था कि परिवर्तन वापस किया जा रहा है (यानी उस वापस किए गए कमिट का चेरी-पिक नहीं था )। बेशक, यह मेरी गलती है। लेकिन इस मामले में यह उम्मीद की जाती है कि git को संघर्ष की स्थिति के साथ विफल होना चाहिए, इसके बजाय बहुत स्मार्ट होने की कोशिश करना चाहिए, जिसके परिणामस्वरूप भ्रमित उपयोगकर्ता होता है।
आर्टेम पिसारेंको

यह तब हो सकता है जब आप एक मर्ज कमेटी को रिवर्ट करते हैं और चेरी-पिक किए जाने के लिए रिवर्ट ब्रांच पर रहते हैं।
मैट

11

मेरे मामले में यह मुझे पागल कर रहा था, क्योंकि यह काफी स्पष्ट था कि जिस विशिष्ट प्रतिबद्धता को मैं चुन लेना चाहता था, उसे मेरी वर्तमान शाखा में विलय नहीं किया गया था ।

यह पता चला है कि किसी ने पहले ही एक हफ्ते पहले चेरी को उठाया था। परिवर्तन , लेकिन नहीं विशेष SHA, मेरे वर्तमान शाखा में पहले से ही थे, और मैं उन्हें गौर नहीं किया था।

उस फ़ाइल की जांच करें जिसे आप चेरी लेने का प्रयास कर रहे हैं। यदि उनके पास पहले से ही परिवर्तन हैं, तो प्रतिबद्ध का एक संस्करण पहले से ही चेरी को चुना गया है या किसी अन्य तरीके से जोड़ा गया है। इस प्रकार चेरी को फिर से लेने की कोई आवश्यकता नहीं है।


मुझे पूरा यकीन है कि जब चेरी चेरी पिक करके लाई गई थी, तो यह विशिष्ट प्रतिबद्धता आपकी शाखा में कभी नहीं है, क्योंकि चेरी पिक एक नया हैश होगा, है ना? या मैं गलत समझ रहा हूँ?
माउथ

@msouth मैं मूल रूप से अन्य उत्तरों से क्या ले गया था "प्रतिबद्ध पहले ही विलय हो गया था", लेकिन मैं देख सकता था कि यह मेरी शाखा में नहीं था । आप चेरी पिक के बारे में सही हैं, लेकिन हमेशा एक नया SHA होना चाहिए।
pkamb

हाँ, मैं सोच रहा था "विशिष्ट प्रतिबद्ध, हैश द्वारा पहचाना गया", जब मैंने वह टाइप किया। मेरी भाषा अभेद्य थी। मैं अक्सर आउटपुट के माध्यम से यह git log --graph --pretty --decorate --onelineदेखने के लिए पीछे देखता हूं कि क्या एक दिया गया SHA मेरी शाखा में है या नहीं। नीचे दिए गए मेरे जवाब को देखें कि आप यह सोचकर भी कैसे मिश्रित हो सकते हैं कि प्रतिबद्ध संदेश परिवर्तन का संकेत है - ऐसी स्थिति है जहां यह नहीं है, और यही मुझे मूल रूप से इस सवाल की ओर ले जाता है। एक का मस्तिष्क उन शॉर्टकटों को बनाने के लिए जाता है और वे कभी-कभी आपको काटने के लिए वापस आ सकते हैं।
दोपहर

6

यह भी ध्यान दें कि .gitkeepपेड़ के लिए एक खाली फ़ाइल (जैसे ) को जोड़ना एक खाली प्रतिबद्ध के रूप में चेरी-पिक द्वारा माना जाता है।


मेरे मामले में, मैंने अपनी चेरी-पिक कोशिश से पहले एक रिवर्ट कमिट (जो एक खाली कमिट को ही वापस ला रहा था) था, इसलिए मुझे लगता है कि कुछ भी खाली-ईश शायद इस संदेश के प्रकट होने का कारण होगा।
ढक्कन xx

3

तो, यहाँ अभी तक एक और भ्रमित स्थिति है जहाँ यह उत्पन्न हो सकती है: मेरे पास निम्नलिखित थे:

git लॉग स्क्रीनशॉट

मैं चेरी 9a7b12e लेने की कोशिश कर रहा था, जो कि स्पष्ट रूप से कुछ भी नहीं है - इसने मुझे उस लाइन पर गिट लॉग आउटपुट में यह बताने की भी कोशिश की कि 4497428 वही था जो मैं वास्तव में चाहता था। (मैंने जो किया वह सिर्फ प्रतिबद्ध संदेश के लिए देखा गया था और पहले हैश को मैंने देखा था जो उसके पास था)। वैसे भी, बस लोगों को यह बताने की इच्छा है कि एक और तरीका है जिससे आप चेरी को नो ओप करने की कोशिश कर सकते हैं।


10
स्पष्टीकरण के बिना आपके लिए बहुत उपयोगी नहीं है - यह एक समस्या का सटीक प्रजनन है जिसे मैंने अपनी खोज के लिए इस सवाल का कारण बना दिया था। यदि आपके पास इसे सुधारने की सिफारिश है, तो कृपया मुझे केवल डाउनवोटिंग के बजाय टिप्पणियों में बताएं।
19 मुहुर्त पर msouth
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.