2010-02-23 10 views
21

बिना मेरा अंतिम प्रश्न which turned out to be about rebasing with GIT पूछने के बाद, मैंने फैसला किया है कि मैं बिल्कुल भी पुनर्भुगतान नहीं करना चाहता हूं। इसके बजाय मैं चाहता हूँ करने के लिए:रीबेज

  1. शाखा
  2. काम काम काम, में जाँच और हर समय
  3. उन प्रतिबद्ध के सभी बाहर फेंक और नाटक वे कभी नहीं हुआ पर जोर दे रहा है (ताकि एक स्वच्छ काम के अंत में प्रतिबद्ध)

मैं इस वर्तमान में) एक नया निर्देशिका में फ़ाइलों की प्रतिलिपि और फिर उन्हें एक नई शाखा (मेरे काम कर शाखा के रूप में एक ही बिंदु पर branched में वापस की प्रतिलिपि बनाने, और फिर master या जहां में मर्ज किए जाने कि द्वारा करते हैं।

क्या यह सिर्फ सादा बुरा है और क्यों? अधिक महत्वपूर्ण: क्या ऐसा करने के लिए कोई बेहतर/जीआईटी तरीका है?git rebase -i मुझे मर्ज करने के लिए मजबूर करता है (और उठाओ, और स्क्वैश)।

उत्तर

10

तुम भी --squash विकल्प के साथ git merge उपयोग कर सकते हैं।

+1

स्क्वैश स्वचालित रूप से प्रत्येक प्रतिबद्धता पर होता है, मुझे नहीं लगता कि यह मेरे प्रश्न के साथ कैसे मदद करता है। ऐसा नहीं है कि यह नहीं है, लेकिन मुझे और जानकारी चाहिए। –

+2

मैंने 'गिट मर्ज - स्क्वैश' का उपयोग किया है जब मैं मास्टर के साथ एक विषय शाखा मर्ज करना चाहता था, लेकिन प्रतिबद्धता इतिहास को केवल एक प्रतिबद्धता में भी कम करता हूं। 'गिट मर्ज - स्क्वैश 'मर्ज करता है, लेकिन वास्तव में विलय करने से पहले आप एक प्रतिबद्ध संदेश प्रदान करते हैं। तो अंतिम परिणाम प्रकट होता है जैसे कि आपने मास्टर शाखा में केवल एक बार किया है। –

+1

क्षमा करें मुझे यह समझने में तीन साल लगे कि यह जवाब सही है। अच्छा कार्य! –

24

करने के लिए सबसे आसान बात एक मुलायम रीसेट है।

git checkout -b topic master 

काम, काम, काम:

तो अपने विषय शाखा चेकआउट।

git commit 
git commit 
git commit 
git commit 

मुबारक इस के साथ, आप मास्टर

git reset --soft master 
git commit 

अब महारत हासिल करने के विलय के शीर्ष पर एक नए एकल प्रतिबद्ध बना सकते हैं और ऊपर साफ विषय शाखा (यह एक तेजी से आगे हो जाएगा)। (ध्यान दें कि यदि आप मास्टर को याद रखने या टैग करने के लिए तैयार हैं तो बस ऐसा करने की आवश्यकता नहीं है और ब्रांचिंग के बिना मास्टर पर काम करें, तो आप अभी git reset --soft old-master और git commit कर सकते हैं और आपको इन अंतिम क्लीन-अप चरणों की आवश्यकता नहीं होगी ।)

git checkout master 
git merge topic 
git branch -d topic 
+4

उत्कृष्ट (+1), लेकिन यह सवाल छोड़ देता है: क्या यह सही तरीका है (गिट के साथ या वास्तव में किसी भी (डी) वीसीएस के साथ)? सभी तार्किक वृद्धिशील कदम squashed हैं, और यदि विषय के लिए प्रतिबद्धता के साथ कुछ बुरा बग है, तो यह तय करना और ठीक करना आसान नहीं होगा। – VonC

+2

@ चार्ल्स बेली, इसके लिए धन्यवाद। @ वॉनसी, यह निर्भर करता है। मैं हर मिनट या उससे कम में जांच करता हूं ... बहुत अधिक जानकारी उतनी ही खराब है जितनी कोई भी नहीं। –

+0

तो बस स्पष्ट होने के लिए, गिट रीसेट - सॉफ्ट कुछ_branch मुझे कुछ फ़ाइलों को छूए बिना कुछ_branch/some_commit पर स्विच करता है? –

संबंधित मुद्दे