जब कोई कमिट-इन-प्रोग्रेस अचानक से किसी दूसरे पर निर्भर करता है तो उसे कैसे संभालना है?


13

मैं जीआईटी के साथ अनुभवहीन हूं लेकिन मैं इसकी आदत डालने की पूरी कोशिश करता हूं और अब तक मैं इसे सिर्फ उन प्रोजेक्ट्स के लिए इस्तेमाल कर रहा हूं जिन्हें मैं अकेले काम करता हूं।

जब मैं कोड होता है तो स्वाभाविक रूप से कुछ टॉप-डाउन दृष्टिकोण होता है (जैसा कि मैं भविष्य को नहीं जान सकता), और एक पुनरावर्ती विषय है:

मैं कुछ काम करता हूं।
मुझे पता चला है कि मेरे काम को "सराहनीय" बनाने के लिए मुझे दूसरे काम करने की ज़रूरत है।
दूसरे काम के हकदार हैं।

कुछ सराहनीय से मेरा मतलब है कि कुछ ऐसा है जो संकलन करता है या ऐसा कुछ है जो कुल गड़बड़ नहीं है।
और कुछ ऐसा है जो इसके हकदार है, मैं यह उल्लेख कर रहा हूं कि मैंने सीखा है कि केवल एक काम करना चाहिए।

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


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

आप फ़ाइलों के कुछ हिस्सों का चयन कर सकते हैं git add -pऔर फिर केवल उन्हीं भागों को कमिट कर सकते हैं । यह एक बहुत शक्तिशाली तकनीक है और मैं इसका उपयोग लगभग हर समय करता हूं।
eush77

जवाबों:


17

इसे हल करने के कई तरीके हैं।

यदि आप अपने वर्तमान परिवर्तनों के साथ हस्तक्षेप किए बिना पहले प्रतिबद्ध के लिए परिवर्तन करना चाहते हैं, तो आप उपयोग करना चाह सकते हैं git stash। यह आपके सभी खुले परिवर्तनों को दूर कर देगा, जिससे आप बाद में उन्हें पुनर्स्थापित कर सकेंगे। git statusयह देखने के लिए उपयोग करें कि वे अब मौजूद नहीं हैं। अब पहले कमिट बनाएं जैसा कि आप उपयोग में ला रहे हैं। इसके बाद आप git stash popअपने मूल परिवर्तनों को बहाल करने और अपने प्राथमिक कार्य को करने के लिए दूसरी प्रतिबद्धताओं का उपयोग कर सकते हैं ।

दूसरा तरीका यह होगा कि आप सभी आवश्यक बदलाव करें और फिर दो कमिट बनाएं, जिसमें दोनों आपके काम का हिस्सा हों। ऐसा करने के लिए आप अनुक्रमणिका (जिसे मचान क्षेत्र के रूप में भी जाना जाता है) का उपयोग कर सकते हैं। यह एक विशेष क्षेत्र है जिसका उपयोग आप कमिट तैयार करने के लिए कर सकते हैं। यह मानते हुए कि आपने कई फाइलें बदली हैं, आप उनमें से प्रत्येक का उपयोग करके अनुक्रमणिका में जोड़ सकते हैं git add। जब कर git commitकेवल वे फ़ाइलें सूची में उसे शामिल प्रतिबद्ध हो जाएगा। git statusआपको दिखाएगा कि आपके परिवर्तनों के कौन से भाग प्रतिबद्ध होंगे और कौन सा नहीं होगा। उदाहरण के लिए, यह फ़ाइलों को बदलने के बाद इस तरह दिखेगा axt, b.txt और c.txt और बाद में कर रहा है git add a.txt:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   b.txt
        modified:   c.txt

जब आप git commitइस स्थिति में कर रहे होते हैं , तो केवल a.txt के परिवर्तन आपकी प्रतिबद्धता में जुड़ जाएंगे।

अतिरिक्त आप का उपयोग करके किए जाने वाले सटीक परिवर्तनों की समीक्षा कर सकते हैं git diff --cached, जो आपको उन सभी परिवर्तनों का एक हिस्सा दिखाएगा जो प्रतिबद्ध होने जा रहे हैं।

यदि एक फ़ाइल में दोनों कमिट के लिए परिवर्तन हैं, तो आप "git add --patch b.txt" का उपयोग करके इसे इंडेक्स के केवल हिस्सों में जोड़ सकते हैं। git आपको एक इंटरेक्टिव मोड प्रदान करेगा जो आपको दिए गए फ़ाइल में प्रत्येक परिवर्तन के लिए कहता है यदि इसे इंडेक्स में जोड़ा जाना चाहिए। यह कठिन हो सकता है यदि आपके पास एक-दूसरे के बगल में लाइनों में परिवर्तन हो, जो दो कमिट में विभाजित होने की आवश्यकता है, हालांकि इसके समाधान के तरीके भी हैं।

यदि आप स्टेजिंग क्षेत्र के बारे में अधिक जानना चाहते हैं तो आप इसे पढ़ना चाहते हैं: http://gitready.com/beginner/2009/01/18/the-staging-area.html

आप इंटरएक्टिव जोड़ने के बारे में और अधिक पढ़ना चाह सकते हैं: http://nuclearsquid.com/writings/git-add/


5

यदि आप गिट के लिए GUI का उपयोग करते हैं, जैसे कि Atlassian द्वारा SourceTree, या git gui, आप फ़ाइलों के कुछ हिस्सों को कम कर सकते हैं और अन्य भागों को बिना छोड़े छोड़ सकते हैं। वास्तव में, आप कोड की अलग-अलग लाइनें कर सकते हैं।

मैं अक्सर ऐसा करता हूं जब मैं खरगोश छेद नीचे गिरता हूं जैसे आप वर्णन करते हैं। यह उस समझदार प्रतिबद्ध बनाने का एक शानदार तरीका है या मुख्य प्रतिबद्ध के लिए एक अग्रदूत के रूप में प्रतिबद्ध है।

आप इसे कमांड लाइन से कर सकते हैं, लेकिन यह एक प्रकार का अनाड़ी है।

जब आप Git पैच लेवल और व्यक्तिगत लाइनों पर कमिट कर सकते हैं, तो आपको नई ब्रांच बनाने, स्टैश करने, कमिट करने, स्टैश करने और मर्ज करने की आवश्यकता नहीं है। बस काम करते रहो और प्रवाह को मत तोड़ो। आपको एक अच्छी चीज मिल रही है।


@MasterMastic THIS आपका स्वीकृत उत्तर होना चाहिए। कोड की सिर्फ व्यक्तिगत पंक्तियों को करने में सक्षम होने के नाते एक भयावह भगवान है।
जेसीटीजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.