2013-07-03 17 views
5

मान लें कि मैं foo_baz नामक शाखा में एक सुविधा पर काम कर रहा हूं।स्क्वैश मास्टर पर काम करता है लेकिन फीचर शाखा पर अलग-अलग काम करता है?

मैं इस सुविधा पर काम करते समय कई बार प्रतिबद्ध करता हूं।

मैं समय-समय पर रिमोट रिपो में एक रिमोट-ट्रैकिंग शाखा foo_baz दबाता हूं। आईई origin/foo_baz

मैं उस बिंदु पर प्रगति करता हूं जहां मैं foo_baz से master में सभी कामों को मर्ज करना चाहता हूं और origin/master पर धक्का देना चाहता हूं।

मैं master ऐसे में foo_baz विलय कर सकते हैं कि सभी प्रतिबद्ध अभी भी foo_baz में अलग कर रहे हैं के लिए प्रतिबद्ध कुचल के histroy, लेकिन वह master में के इतिहास, वे सब एक हैं,: यहाँ सवाल है?

संपादित करें:

मैं एक Git शुरुआत का एक सा है, तो कृपया मुझे माफ कर वहाँ कुछ पूरी तरह से स्पष्ट है कि मैं याद कर रहा हूँ अगर। मैंने वेब पर चारों ओर खोद दिया लेकिन मेरे प्रश्न का सीधा जवाब नहीं मिला।

उत्तर

5

आप वास्तव में --squash (अन्य उत्तरों के रूप में) की तलाश में हो सकते हैं, लेकिन आप इसके बजाय --no-ff देख रहे हैं।

यहां दोनों के बीच अंतर है। मान लीजिए आप दो प्रतिबद्ध के साथ शुरू:

A --- B    <-- branch "master", when you start 

और फिर अपना नया शाखा foo_baz पर दो और बनाना:

A --- B    <-- master 
     \ 
      C --- D  <-- foo_baz 

अब (एक बार master पर वापस), तो आपको इन दो विकल्पों में (दूसरों के बीच) है। आप आप दे देंगे जो कर सकते हैं git merge --squash foo_baz && git commit निम्नलिखित:

A --- B ----------- E <-- master 
     \ 
      C --- D  <-- foo_baz 

या आप git merge --no-ff कर सकते हैं:

A --- B ----------- E <-- "master" after merge --no-ff 
     \  /
      C --- D  <-- foo_baz 

दोनों आप एक नया पहले मामले -इन E प्रतिबद्ध देना अलग git commit से कमांड लेकिन पहला व्यक्ति बहु-माता-पिता की कार्रवाई को दबा देता है, ताकि अंत में, जब आप इस साल एक साल से वापस देखेंगे, ऐसा लगता है कि आपने शाखा से सभी बदलावों की प्रतिलिपि बनाई है। पेड़ (git checkout शाखाओं में आपको मिलने वाली सभी फाइलें D और E दोनों में समान होंगी (इस विशेष मामले में वैसे भी, जहां मर्ज कार्रवाई से पहले master पर बी में कोई बदलाव नहीं है), लेकिन वे ' अलग-अलग काम करता है।,

A --- B 
     \ 
      C --- D  <-- foo_baz, master 

जहां कोणीय रेखा बाहर सीधा किया जा सकता है यदि आप एक इतिहास है जहाँ दोनों दे रही है:

एक सीधे git merge से अंतर यह है कि बाद एक "तेजी से आगे" उत्पादन आम तौर पर होगा, जो इस तरह दिखता है शाखाएं बिल्कुल वही दिखती हैं।

0

मुझे लगता है कि क्या आप चाहते हैं कुछ इस तरह है:

git merge --squash foo_baz 
git commit 
0

मुझे लगता है कि आप --squash ध्वज के लिए देख रहे हैं।

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