गिट 2.6+ के लिए (28 सितंबर 2015 को जारी)
केवल git config
सेटिंग जो ब्याज की होगी:
rebase.autoStash
(Git 2.27, Q2 2020 के साथ, अब आपके पास भी है merge.autostash
, नीचे देखें)
जब सही पर सेट किया जाता है, तो ऑपरेशन शुरू होने से पहले स्वचालित रूप से एक अस्थायी स्लैश बनाएं, और ऑपरेशन समाप्त होने के बाद इसे लागू करें।
इसका मतलब है कि आप एक गंदे वर्कट्री पर रिबास चला सकते हैं।
हालांकि, देखभाल के साथ उपयोग करें: एक सफल रिबास के बाद अंतिम स्लैश आवेदन गैर-तुच्छ संघर्ष हो सकता है। झूठे की अवहेलना।
इसके साथ गठबंधन करें:
pull.rebase
जब सही होता है, तो भ्रूण शाखा के शीर्ष पर रिबास शाखाएं होती हैं, बजाय डिफ़ॉल्ट शाखा से डिफ़ॉल्ट शाखा को विलय करने के जब "गिट पुल" चलाया जाता है।
git config pull.rebase true
git config rebase.autoStash true
git pull
एक गंदे पेड़ में भी काम करने के लिए यह पर्याप्त होगा ।
उस मामले में किसी अन्य व्यक्ति की जरूरत नहीं है।
केविन Daudt ( ) द्वारा प्रतिबद्ध 53c76dc (04 जुलाई 2015) देखें । ( जूनियो सी हमानो द्वारा विलय - - in प्रतिबद्ध e69b408 , 17 अगस्त 2015)Ikke
gitster
pull
: rebase.autostash
सक्षम होने पर गंदे पेड़ की अनुमति दें
रिबेस ने एक गंदे काम के पेड़ का सामना करने पर परिवर्तन को रोकना सीखा, लेकिन git pull --rebase
ऐसा नहीं किया।
केवल तभी सत्यापित करें कि कार्यशील पेड़ rebase.autostash
सक्षम नहीं होने पर गंदा है।
नोट: यदि आप ऑटोस्टैश के बिना खींचना चाहते हैं (भले ही rebase.autoStash true
सेट हो), आपके पास git 2.9 (जून 2016) से है:
pull --rebase --no-autostash
देखें प्रतिबद्ध 450dd1d , 1,662,297 प्रतिबद्ध , 44a59ff प्रतिबद्ध , 5c82bcd प्रतिबद्ध , 6ddc97c प्रतिबद्ध , eff960b प्रतिबद्ध , प्रतिबद्ध efa195d (02 अप्रैल 2016), और f66398e प्रतिबद्ध , c48d73b प्रतिबद्ध (21 मार्च 2016) द्वारा मेहुल जैन ( mehul2029
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में 7c137bb प्रतिबद्ध , 13 अप्रैल 2016)
विशेष रूप से प्रतिबद्ध f66398e में शामिल हैं:
pull --rebase
: --[no-]autostash
झंडा जोड़ें
यदि rebase.autoStash
कॉन्फ़िगरेशन चर सेट किया गया है, git pull --rebase
तो कमांड लाइन से इसे " " के लिए ओवरराइड करने का कोई तरीका नहीं है ।
" git pull --rebase
" --[no-]autostash
कमांड लाइन के झंडे को सिखाएं, जो rebase.autoStash
सेट होने पर वर्तमान मूल्य को ओवरराइड करता है । जैसा कि " git rebase
" --[no-]autostash
विकल्प को समझता है , यह " git rebase
" जब " git pull --rebase
" कहा जाता है तो विकल्प को अंतर्निहित करने के लिए पारित करने की बात है।
चेतावनी: Git 2.14 (Q3 2017) से पहले, " git pull --rebase --autostash
" जब स्थानीय इतिहास तेजी से ऊपर की ओर तेजी से आगे नहीं बढ़ा तो ऑटो-स्टैश नहीं हुआ।
देखें f15e7cf प्रतिबद्ध (01 जून 2017) द्वारा टायलर Brazier ( tylerbrazier
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में प्रतिबद्ध 35898ea , 05 जून 2017)
pull
: --rebase --autostash
गंदे रेपो में ff काम करता है
जब git pull --rebase --autostash
एक गंदे भंडार में तेजी से अग्रगामी परिणाम हुआ, तो कुछ भी नहीं किया जा रहा था और पुल विफल हो गया।
यह एक शॉर्टकट के कारण था जब हम तेजी से फ़ॉरवर्ड कर सकते हैं, लेकिन रिडसेट को चलाने से बचने के लिए, लेकिन ऑटोस्टैश को उस कोडपाथ पर ध्यान नहीं दिया जाता है।
अद्यतन: Mariusz Pawelski टिप्पणियों में एक दिलचस्प सवाल पूछता है :
इसलिए हर कोई इस बारे में लिख रहा है autostash
कि आप कब रिबेस (या pull --rebase
) करते हैं।
लेकिन जब आप मर्ज के साथ सामान्य खींचतान करते हैं तो कोई भी ऑटोस्टैशिंग के बारे में नहीं ले रहा है ।
तो उसके लिए कोई स्वचालित स्विच नहीं है? या मुझे कुछ याद आ रहा है? मैं करना पसंद करता हूं, git pull --rebase
लेकिन ओपी ने " मानक " गिट पुल के बारे में पूछा
उत्तर:
मूल धागा इस autostash सुविधा पर चर्चा, इसके लिए मूल रूप से दोनों लागू किया गया था git pull
(मर्ज) और git pull --rebase
।
लेकिन ... जूनियो सी हामानो (गिट अनुचर) ने कहा कि:
अगर pull-merge
कुछ ऐसा था जो "झुंझलाहट" को प्रेरित करेगा, जो इस विषय को ट्रिगर करता है, तो परिभाषा के अनुसार, स्थानीय परिवर्तन मर्ज के साथ ओवरलैप हो जाता है, और यह आंतरिक "स्टैश पॉप" मर्ज को छूने वाले रास्तों को छू लेगा और इसका परिणाम "ड्राप्ड" होने की संभावना नहीं है। "लेकिन आगे के संघर्षों को हल करने के लिए छोड़ दें।
मुझे संदेह है कि pull.autostash
कॉन्फ़िगरेशन एक अच्छा जोड़ नहीं है क्योंकि यह एक खराब, दर्द-उत्प्रेरण वर्कफ़्लो को प्रोत्साहित करता है।
साधारण मामलों में यह चोट नहीं पहुंचा सकता है, लेकिन जब स्थानीय परिवर्तन जटिल होते हैं, तो यह सक्रिय रूप से इसे न होने की तुलना में चोट पहुंचाएगा, और कॉन्फ़िगरेशन चुनने के लिए प्रोत्साहन लूटता है।
"पुल-रिबास" के लिए समीकरण कुछ अलग है, जैसा कि "रिबास" आपको एक साफ काम करने वाले पेड़ से शुरू करने के लिए जोर देता है, इसलिए "डाउनलोड करें और फिर बंद करें" झुंझलाहट बड़ा लगता है। मुझे संदेह है कि ढीला होना वास्तविक समस्या का अधिक उत्पादक समाधान हो सकता है।
तो, एक क्लासिक पुल-मर्ज के बारे में, यह बेहतर है:
उपयोगकर्ता को WIP की प्रकृति के बारे में सोचने के लिए प्रोत्साहित करें कि वह " git pull
" चलने से पहले काम के पेड़ में है ।
क्या यह एक बहुत ही जटिल जानवर है जो दूसरों के साथ क्या कर रहा है, या क्या यह एक तुच्छ परिवर्तन है जिसे वह दूर फेंक सकता है और उसे वापस ला सकता है?
यदि पूर्व में, वह " checkout -b
" करने से बहुत बेहतर होगा, तब तक काम करते रहें, जब तक कि स्थानीय परिवर्तन मूल आकार में आने से पहले कुछ हद तक बेहतर आकार और "प्रतिबद्ध" न हो जाए।
यदि बाद वाला, वह करना बेहतर है:
- "
git pull
",
- इसे खोजने के बाद संघर्ष, भागो
git stash
,
git merge FETCH_HEAD
तथा
git stash pop
कहा जा रहा है कि, Git 2.27 (Q2 2020) के साथ, " git pull
" जब कोई pull.rebase
कॉन्फ़िगरेशन मौजूद नहीं है, और न तो चेतावनी देना सीखा है और न --[no-]rebase
ही --ff-only
दिया गया है (जिसके परिणामस्वरूप मर्ज होगा)।
एलेक्स हेनरी ( ) द्वारा प्रतिबद्ध d18c950 (10 मार्च 2020) देखें । ( जूनियो सी हमानो द्वारा विलय - - मेंalexhenrie
gitster
जूनियो हमानो ५६ डी ६ एफ , २) मार्च २०२०)
pull
: यदि उपयोगकर्ता यह नहीं कहता कि रिबास या मर्ज करना है तो चेतावनी दें
साइन-ऑफ-बाय: एलेक्स हेनरी
अक्सर नौसिखिए Git उपयोगकर्ता " pull --rebase
" कहना भूल जाते हैं और ऊपर से एक अनावश्यक मर्ज के साथ समाप्त होते हैं।
वे आमतौर पर जो चाहते हैं वह pull --rebase
सरल मामलों में या तो " " है, या " pull --ff-only
" मुख्य एकीकरण शाखाओं की प्रतिलिपि को अद्यतन करने के लिए, और उनके काम को अलग से रिबेट करते हैं।
pull.rebase
विन्यास चर उन्हें सरल मामलों में मदद करने के लिए मौजूद है, लेकिन वहाँ इन उपयोगकर्ताओं को इसके बारे में पता करने के लिए कोई तंत्र है।
--[no-]rebase
कमांड लाइन से कोई विकल्प और कोई pull.rebase
कॉन्फ़िगरेशन चर नहीं दिए जाने पर एक चेतावनी संदेश जारी करें ।
इससे उन लोगों को असुविधा होगी जो कभी " pull --rebase
" नहीं चाहते हैं , जिन्हें कुछ विशेष नहीं करना है, लेकिन असुविधा की लागत प्रति उपयोगकर्ता केवल एक बार भुगतान की जाती है, जो कि कई नए उपयोगकर्ताओं की मदद करने के लिए उचित लागत होनी चाहिए।
Git 2.27 (Q2 2020) के साथ, " git merge
" " --autostash
" विकल्प सीखता है , और नई merge.autostash
सेटिंग।
देखें d9f15d3 प्रतिबद्ध , f8a1785 प्रतिबद्ध , a03b555 प्रतिबद्ध , 804fe31 प्रतिबद्ध , 12b6e13 प्रतिबद्ध , प्रतिबद्ध 0dd562e , प्रतिबद्ध 0816f1d , प्रतिबद्ध 9bb3dea , 4d4bc15 प्रतिबद्ध , प्रतिबद्ध b309a97 , f213f06 प्रतिबद्ध , 86ed00a प्रतिबद्ध , facca7f प्रतिबद्ध , be1bb60 प्रतिबद्ध , efcf6cf प्रतिबद्ध , c20de8b प्रतिबद्ध , प्रतिबद्ध bfa50c2 , 3442c3d , 5b2f6d9 (07 अप्रैल 2020), 6542525a प्रतिबद्ध(04 अप्रैल 2020), और डेंटन लियू ( ) द्वारा fd6852c , 805d9ea (21 मार्च 2020) के लिए प्रतिबद्ध । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध bf10200 , 29 अप्रैल 2020)Denton-L
gitster
pull
: पास करना
साइन-ऑफ-बाय: डेंटन लियू
इससे पहले, --autostash
केवल साथ काम किया था git pull --rebase
।
हालांकि, पिछले पैच में, मर्ज सीखा और --autostash
साथ ही ऐसा कोई कारण नहीं है कि हमें यह प्रतिबंध क्यों न हो। मर्ज करने के
लिए पास --autostash
करना सिखाएं , ठीक उसी तरह जैसे उसने रिबेस के लिए किया था।
तथा:
rebase
: apply_autostash()
sequencer.c से उपयोग करें
साइन-ऑफ-बाय: डेंटन लियू
apply_autostash()
में समारोह builtin/rebase.c
के लिए इसी तरह के लिए पर्याप्त है apply_autostash()
में समारोह sequencer.c
वे लगभग विनिमेय, की आर्ग वे स्वीकार करते हैं प्रकार के अलावा हैं। करsequencer.c
संस्करण को बाहरी और इसे रिबास में उपयोग करें।
रिबास संस्करण 6defce2b02 (" बिल्टइन रिबेस: सपोर्ट --autostash
ऑप्शन", 2018-09-04, Git v2.20.0-rc0 - बैच # 8 में सूचीबद्ध मर्ज ) से सी रूपांतरण के रूप में पेश किया गया था।
इसने फंक्शन को डुप्लिकेट करने का विकल्प चुना, क्योंकि उस समय, शेल से सी के साथ-साथ इंटरएक्टिव रीबेस को परिवर्तित करने वाली एक और इन-प्रोग्रेस परियोजना थी और वे संस्करण को रीक्रिएट करके उनके साथ टकराव नहीं करना चाहते थे ।
चूंकि दोनों प्रयास लंबे समय से किए जा रहे हैं, इसलिए हम उन्हें स्वतंत्र रूप से एक साथ जोड़ सकते हैं।
sequencer.c
apply_autostash()