मेरे पास 2 कमिट हैं, ए तब बी, धकेलने के लिए तैयार। मुझे एहसास है कि मैं ए में कुछ जोड़ना भूल गया।
मैं Magit का उपयोग करके इस परिवर्तन को A में कैसे जोड़ सकता हूं? मुझे यह भी पता नहीं है कि मुझे कौन सा Git प्रलेखन देखना चाहिए।
मेरे पास 2 कमिट हैं, ए तब बी, धकेलने के लिए तैयार। मुझे एहसास है कि मैं ए में कुछ जोड़ना भूल गया।
मैं Magit का उपयोग करके इस परिवर्तन को A में कैसे जोड़ सकता हूं? मुझे यह भी पता नहीं है कि मुझे कौन सा Git प्रलेखन देखना चाहिए।
जवाबों:
आइए एक पल के लिए दिखावा करें कि आप कमिटमेंट में कुछ जोड़ना चाहते HEAD
हैं, यानी आपके उदाहरण में "सेकंड कमिट बी"।
cएक बाध्यकारी " aसंशोधन" सुविधाओं पर प्रतिबद्ध पॉपअप । उस कुंजी को दबाने से कमिटमेंट में होने वाले परिवर्तनों का "संशोधन" हो जाएगा HEAD
। चूंकि कमिट Git में परस्पर योग्य नहीं हैं, इसलिए यह वास्तव में पुरानी प्रतिबद्ध को एक नई प्रतिबद्ध के साथ बदल देगा। पुराने प्रतिबद्ध संदेश के साथ एक बफर पॉप अप हो जाएगा, ताकि आप इसे संशोधित कर सकते हैं यदि जोड़ा गया परिवर्तन भी आवश्यक है कि आप संदेश को समायोजित करें। हमेशा की तरह, C-c C-cजब आप संदेश को संपादित कर रहे हों तब दबाएं । यह git commit --amend
कमांड लाइन पर चलने के बराबर है ।
HEAD
इसके प्रतिबद्ध संदेश को संपादित परिवर्तनों को जोड़ें और संपादित करेंक्योंकि अक्सर ऐसा होता है कि आपको केवल परिवर्तन या संदेश को समायोजित करना पड़ता है, मैगिट दो अतिरिक्त संस्करण प्रदान करता है:
HEAD
प्रतिबद्ध संदेश को संपादित किए बिना चरणबद्ध परिवर्तनों को जोड़ेंHEAD
इसमें किए गए बदलावों को जोड़े बिना संदेश को बदल देंजब आप ऐसा कमिट नहीं करना चाहते हैं HEAD
, तो ऊपर काम नहीं करेगा। ये आदेश हमेशा "संशोधित करें" (अर्थात बदलें) HEAD
। Git एक प्रतिबद्ध आदेश को संशोधित करने के लिए एक एकल आदेश प्रदान नहीं करता है, HEAD
इसलिए यह थोड़ा अधिक शामिल है।
मैगिट इस तरह की एक कमांड प्रदान करता है , लेकिन क्योंकि ऐसी परिस्थितियां हैं जिनमें कई चरणों में ऐसा करना बेहतर होता है, हम पहले उस पर चर्चा करेंगे।
के अलावा एक प्रतिबद्ध कमिट HEAD
को तीन चरणों में तोड़ा जा सकता है:
A
) HEAD
।HEAD
(जैसा कि ऊपर वर्णित है), जिसके परिणामस्वरूप प्रतिबद्ध है A'
।A
, लेकिन शीर्ष पर A'
।यह एक इंटरैक्टिव रिबास का उपयोग करके किया जा सकता है। rरिबास पॉपअप दिखाने के लिए टाइप करें। फिर m"एड ए कमिट" रिबास संस्करण को लागू करने के लिए टाइप करें। हाल के कमिट्स वाला एक बफर दिखाई देता है। उस कमेटी में जाएँ जिसे आप संशोधित करना चाहते हैं और C-c C-cउसे चुनना चाहते हैं। इसके बाद Git इतिहास को उस प्रतिबद्ध करता है और स्टेटस बफर में चल रहे रिबेस के बारे में जानकारी दिखाता है।
HEAD
ऊपर वर्णित अनुसार संशोधित करें । फिर गिट से कहें कि आप टाइप करके आए हैं r r। यदि A'
और B
संघर्ष होता है, तो रिबास रुक जाएगा B
और आपको संघर्ष को हल करना होगा। r rजारी रखने के लिए आपने ऐसा करने के बाद प्रेस किया है ।
यदि आप जानते हैं कि आपके बदलावों का A
परिणाम संघर्ष होगा B
, तो ऊपर वर्णित अनुसार आगे बढ़ें, अन्यथा निम्नलिखित दृष्टिकोण का उपयोग करें।
Git का उपयोग करके "फ़िक्सअप कमिट्स" बनाने की अनुमति देता है git commit --fixup A
। यह एक नई प्रतिबद्ध बनाता है , जो उन परिवर्तनों को रिकॉर्ड करता है जो "किसी अन्य प्रतिबद्ध में किए जाने चाहिए"। वह प्रतिबद्धता नई हो जाती है HEAD
। वहाँ भी एक --squash
प्रकार मौजूद है । अंतर के बारे में जानकारी के लिए git-commit
मैन पेज देखें ।
वास्तव में A
कमिट और नई कमिट को मिलाने के लिए और A'
फिर उसके B
ऊपर फिर से रीपेस का उपयोग करना होगा। मैगिट ऐसा करने के लिए एक सुविधाजनक आदेश प्रदान करता है r f।
उपरोक्त दृष्टिकोण के लिए मुख्य अंतर यह है कि यहां हम पहली बार एक नई प्रतिबद्धता बनाते हैं और फिर हम उस "लक्ष्य" के साथ और फिर से संयोजन करने के लिए रिबेस करते हैं B
। ऊपर हमने कमिट करने के बजाय रिबासिंग शुरू की।
मैगिट में --fixup
और --squash
वेरिएंट दोनों कमिट पॉपअप, ऑन fऔर से उपलब्ध हैं s। लेकिन MAGIT भी प्रदान करता है "तत्काल" Fixup और पर स्क्वैश आदेशों की वेरिएंट Fऔर S। ये वैरिएंट "नॉन-इंस्टेंट" वेरिएंट की तरह एक नया कमिट बनाते हैं, लेकिन फिर वे रिबेट का इस्तेमाल करते हुए टारगेट कमिट के साथ तुरंत आपके साथ जुड़ जाते हैं, बिना किसी दूसरी कमांड के।
"त्वरित फिक्स-अप" ( c F) अनिवार्य रूप से "विस्तार के रूप में एक ही बात है HEAD
" ( c e), सिवाय इसके कि यह काम करता है किसी भी प्रतिबद्ध के लिए, बस नहीं HEAD
।
आगे की पढाई:
git-commit(1)
git-rebase(1)
git-commit
मैन पेज रीडायरेक्ट करता है git-rebase(1)
जिसमें ये पंक्तियाँ हैं: मुड़े हुए कमिट के लिए सुझाया गया कमिट मैसेज "स्क्वैश" कमांड के साथ पहले कमिट और उन लोगों के कमिट मैसेज का कॉनसेप्ट है, लेकिन "फिक्स" के साथ कमिट के मैसेज को छोड़ देता है आदेश। IOW, यदि आप पिछली प्रतिबद्ध में कोड को ठीक करना चाहते हैं , तो फ़िक्सअप का उपयोग करें, यदि आप भी प्रतिबद्ध संदेश को ठीक करना चाहते हैं , तो स्क्वैश का उपयोग करें ।
git commit --amend –C HEAD
Git कमांड है जिसे आप ढूंढना चाहते हैं, और आप Magit में संशोधन कर सकते हैं C-c C-a
।
C-c C-a
एक पुराने संस्करण से है (मुझे लगता है)। इसके अलावा, मुझे मदद बफर ( ?
) में "संशोधन" का कोई निशान नहीं दिख रहा है ।
तो एक कार्यप्रवाह है:
फिर
ऑटोसक्वाश स्वचालित रूप से सभी को स्थानांतरित कर देगा! फिक्सअप सही जगह पर पहुंचता है और उन्हें फिर से बेस पर स्क्वैश करने के लिए सेट करता है।
i
से मुझे उपज मिलती है Cannot rebase: Your index contains uncommitted changes. Please commit or stash them.
। सिवाय मेरे कोई भी परिवर्तन नहीं हुआ है। : /
Proceed despite merge in rebase range? [c]ontinue, [s]elect other, [a]bort
। क्या यह मुझे यह बताने की कोशिश कर रहा है कि मेरा फिक्सअप आगामी मर्ज पर खराब हो सकता है?
merge in rebase
BUGS के तहत देखें git help rebase
। मेरा सुझाव है कि अपस्ट्रीम को खींचने से पहले फिक्सअप करना।
अंतिम प्रतिबद्ध को संशोधित करने के लिए, यह "सी" है। फिक्सअप कुछ पुरानी प्रतिबद्धताओं को संशोधित करने के लिए है।