इसके डिफॉल्ट मोड में, git fetch के लिए git पुल शॉर्टहैंड होता है, इसके बाद git मर्ज FETCH_HEAD होता है।
जब आप एक करते हैं git pull origin master, तो एक
git pullमर्ज करता है, जो अक्सर मर्ज कमिट बनाता है। इसलिए, डिफ़ॉल्ट रूप से, रिमोट से खींचना एक हानिरहित ऑपरेशन नहीं है: यह एक नया कमिट श बना सकता है जो पहले मौजूद नहीं था। यह व्यवहार किसी उपयोगकर्ता को भ्रमित कर सकता है, क्योंकि ऐसा क्या लगता है कि यह एक हानिरहित डाउनलोड ऑपरेशन होना चाहिए वास्तव में अप्रत्याशित तरीके से प्रतिबद्ध इतिहास को बदल देता है।
इससे बचने के लिए आपको चाहिए
git pull --ff-only
(या नहीं? यह देखने के लिए कि कौन आपकी आवश्यकताओं पर फिट बैठता है)
इसके साथ git pull --ff-only, Git आपकी शाखा को केवल तभी अपडेट करेगा, जब वह नया कमिट बनाए बिना "फास्ट-फॉरवर्ड" हो सकता है। यदि ऐसा नहीं किया जा सकता है, तो git pull --ff-onlyबस एक त्रुटि संदेश के साथ गर्भपात करें।
आप अपने Git क्लाइंट को हमेशा --ff-onlyडिफ़ॉल्ट रूप से उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं , इसलिए आपको यह व्यवहार मिलता है भले ही आप कमांड-लाइन ध्वज को भूल जाएं:
git config --global pull.ff only
नोट: --globalध्वज आपकी मशीन पर सभी रिपॉजिटरी के लिए परिवर्तन लागू करता है। यदि आप चाहते हैं कि यह व्यवहार केवल उस रिपॉजिटरी के लिए हो जिसमें आप ध्वज को छोड़ें।
यहां से ले गए
यह चेतावनी Git 2.27 में जोड़ी गई, जैसा कि उनके उत्तर में जो ने बताया है।
यह पूरी चेतावनी जैसा दिखता है:
डाइवर्जेंट शाखाओं को समेटने के तरीके को निर्दिष्ट किए बिना खींचने से हतोत्साहित किया जाता है। आप अपने अगले पुल से कुछ समय पहले निम्न आदेशों में से एक को चलाकर इस संदेश को
रोक सकते हैं : git config pull.rebase false # मर्ज (डिफ़ॉल्ट रणनीति)
git config पुल .rebase true # rebase
git config पुल.ff # फास्ट-फॉरवर्ड
सभी रिपॉजिटरी के लिए डिफ़ॉल्ट प्राथमिकता सेट करने के लिए आप "git config" को "git config --global" से बदल सकते हैं। आप अपने इनवोकेशन पर कॉन्फ़िगर किए गए डिफॉल्ट को ओवरराइड करने के लिए कमांड लाइन पर --rebase, --no-rebase, या --ff-pass भी कर सकते हैं।
चेतावनी विकल्प के रूप में तीन आदेश प्रस्तुत करती है, ये सभी चेतावनी को दबा देंगे। लेकिन वे विभिन्न उद्देश्यों की पूर्ति करते हैं:
git config pull.rebase false # merge (the default strategy)
यह डिफ़ॉल्ट व्यवहार रखता है और चेतावनी को दबा देता है।
git config pull.rebase true # rebase
यह वास्तव में दूरस्थ शाखा के शीर्ष पर स्थित है, स्थानीय और दूरस्थ रूप से एकल शाखा को बनाए रखना (डिफ़ॉल्ट व्यवहार के विपरीत जहां दो अलग-अलग शाखाएं शामिल हैं - एक स्थानीय और दूसरी दूरस्थ पर - और, दोनों को मिलाने के लिए, एक मर्ज किया जाता है )।
git config pull.ff only # fast-forward only
यह केवल तभी खींचता है जब स्थानीय शाखा तेजी से आगे बढ़ाई जा सकती है। यदि नहीं, तो यह बस एक त्रुटि संदेश के साथ आता है (और कोई भी हंगामा नहीं करता है)।
अपडेट करें:
अगर आपके पास Git 2.29या इसके बाद, अब आप सेट कर सकते हैं pull.ffकरने के लिए false, trueया onlyचेतावनी से छुटकारा पाने के।
git config pull.ff true
true- यह डिफ़ॉल्ट व्यवहार है। यदि संभव हो तो पुल तेजी से अग्रेषित किया जाता है, अन्यथा इसे विलय कर दिया जाता है।
git config pull.ff false
false - खींच कभी तेज़-अग्रेषित नहीं होता है, और हमेशा एक मर्ज बनाया जाता है।
git config pull.ff only
only - यदि संभव हो तो पुल तेजी से अग्रेषित किया जाता है, अन्यथा एक त्रुटि संदेश के साथ ऑपरेशन रद्द कर दिया जाता है।