2010-04-17 13 views
21

मैंने अभी कोड का एक बड़ा टुकड़ा बनाया है जिसे मैं कई अलग-अलग कामों में प्रतिबद्ध करना चाहता हूं।
तो मैं प्रासंगिक भागों, प्रतिबद्धता, मंच, प्रतिबद्धता, ... और तब तक मंच कर सकता हूं जब तक कि मेरे सभी परिवर्तनों का पालन न हो जाए।गिट: Commit में चरण, सही वर्कफ़्लो क्या है?

गुम हिस्सा यह है कि मैं कैसे परीक्षण कर सकता हूं कि मैं प्रतिबद्धता को सही तरीके से विभाजित करता हूं या नहीं।
आईई। क्या स्टेजिंग क्षेत्र में भाग कम से कम संकलित है?

ऐसा करने के लिए मुझे किसी भी तरह से मेरे काम के पेड़ को इंडेक्स (स्टेजिंग क्षेत्र) के साथ समन्वयित करने के लिए बाद में किए गए परिवर्तनों को खोए बिना लाया जाना चाहिए।

सही यह करने का तरीका क्या है?
सबसे तेज़ यह करने का तरीका क्या है?

अद्यतन:
इसे मैगिट के साथ कैसे करें?

उत्तर

16

आप के साथ यह कर सकता है:

$ git branch task1 # first set of commit to do 

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

फिर एक interactive session for adding कोशिश तुम सिर्फ क्या चाहते हैं:

$ git add -i 

किसी भी समय आप की जाँच करने के आप क्या जोड़ लिया है चाहता हूँ जोड़ें:

$ git stash --keep-index 

यदि यह संकलित, git commit अपने वर्तमान काम है, और अगर task1 अभी तक पूरा नहीं हुआ है, git stash pop पूर्ण काम करने वाले पेड़ को पुनर्स्थापित करने और दोहराने के लिए।

एक बार task1 पूरी तरह तैयार है, आप कर सकते हैं trim all those 'task1' commits, और विलय मास्टर के सारे काम:

$ git checkout master 
$ git merge task1 
$ git branch -D task1 # no need for that intermediate branch 

आप कुछ महत्वपूर्ण task1 प्रतिबद्ध के इतिहास के संरक्षण के लिए चाहते हैं, तो आपको पहले task1 के शीर्ष पर rebase कर सकते हैं मास्टर mastertask1 (फास्ट-फॉरवर्ड)

अंत में, यदि आपके स्टैश में अभी भी कुछ काम प्रगति पर है, तो task2 के लिए सभी प्रक्रिया दोहराएं।

+3

गिट स्टैश - रखरखाव-सूचकांक बिल्कुल वही है जो मुझे चाहिए था। –

+0

- रखरखाव सूचकांक भी मेरे लिए नया है। धन्यवाद और +1 –

+0

@ वॉनसी: ग्रेट स्पष्टीकरण। यह (और 'गिट-रीबेज -i) चीजों में से एक है जिसे मैं वास्तव में गिट का उपयोग करने के बारे में प्यार करता हूं और मैं हर समय इस तरह की चीज करता हूं। यह आपको * शिल्प * करने की क्षमता देता है ताकि आप समझ सकें ताकि वे समझ सकें और केवल प्रासंगिक (संबंधित) परिवर्तन हो सकें। –

0

यहाँ एक MAGIT तरह से मैं का उपयोग करें:

  • पहले MAGIT "यू" या "एस" मंच या unstage हंक/फ़ाइलें/क्षेत्र से प्रतिबद्ध के लिए अपनी अनुक्रमणिका बनाते हैं। (यह गिट गुई के साथ भी किया जा सकता है)। एक बार आपकी अनुक्रमणिका प्रतिबद्ध करने के लिए तैयार हो जाने पर:
  • "सी" के साथ प्रतिबद्ध, प्रतिबद्ध करने के लिए अपना प्रतिबद्ध संदेश, Ctrl-C Ctrl-C लिखें।
  • "z" के साथ छेड़छाड़ के बाद < < प्रविष्ट करें >>, यह आपके सभी परिवर्तनों को छीन देगा। अपने परिवर्तन वापस पाने के लिए आप "ए" का उपयोग कर सकते हैं जबकि आपका पॉइंटर सही स्टैश एंट्री पर है।

यह जांचने के लिए अपने परीक्षण करें कि आपकी प्रतिबद्धता अच्छी है या नहीं। यदि कोई परिवर्तन किया जाना चाहिए, तो पहले की तरह फिर से करें, लेकिन प्रतिबद्ध संदेश की स्क्रीन में आने से पहले Ctrl-C Ctrl-A दबाएं। यह एक नया निर्माण करने के बजाय आपकी आखिरी प्रतिबद्धता में संशोधन (पूर्ण) होगा।

ध्यान दें कि यदि आप बाद में समझते हैं कि कुछ कोड एक प्रतिबद्धता में संशोधन करना चाहिए जो आपके द्वारा किए गए अंतिम कार्य से पहले है, तो आपको कोड स्वयं को (अस्थायी सारांश के साथ) करना चाहिए, और उन्हें सही प्रतिबद्धता में जोड़ना चाहिए लॉग स्क्रीन तक पहुंचने के लिए "एल" के लिए धन्यवाद, फिर अपने पॉइंटर को उन दोनों प्रतिबद्धताओं से पहले इंगित करें जिन्हें आप स्क्विश करना चाहते हैं, और "गिट रिबेस -आई" सत्र लॉन्च करने के लिए "ई" दबाएं। प्रतिबद्धता को पुन: क्रमबद्ध करें ताकि अस्थायी सारांश लक्ष्य प्रतिबद्धता को "ठीक" करना है। बफर, और टाडा से बाहर निकलें। सब हो गया है।