2015-05-09 8 views
14

मैं एक फीचर शाखा पर काम कर रहा हूं।गिट: उन कार्यों को कैसे स्क्वैश करें जो बीच में विलय-प्रतिबद्ध हैं?

  1. कई काम करता है। Squashed प्रतिबद्ध करता है।
  2. दूरस्थ शाखा में परिवर्तन किए गए। संघर्ष मिला।
  3. मास्टर से संशोधित परिवर्तन, सुविधा शाखा पर हल किए गए संघर्ष। (गिट फ़ेच मूल मास्टर> गिट विलय FETCH_HEAD> हल किए गए संघर्ष मैन्युअल रूप से> गिट प्रतिबद्ध> गिट पुश)
  4. मैंने एक और प्रतिबद्ध किया।

तो, मौजूदा प्रतिबद्धता इतिहास इस तरह दिखता है। वर्तमान से वर्ष के लिए:

  1. प्रतिबद्ध 3
  2. एम yyy (मर्ज किए गए) के लिए प्रतिबद्ध

प्रतिबद्ध मैं 1 में 3 प्रतिबद्ध ऊपर कैसे छुटकारा पाने से पहले मैं अपने सुविधा शाखा मर्ज करते मास्टर?

उत्तर

6

आप rebase -i कर सकते हैं commit 2 के माता-पिता के साथ शुरू (कि master है कि आप से branched पर करते हैं। आप की संभावना है जब आप प्रतिबद्ध मर्ज करने के लिए मिल को फिर से संकल्प को संघर्ष करना होगा, है।

तो अगर अपने इतिहास की तरह

git rebase -i A साथ
* D commit 3 (HEAD) 
    * M merge 
/| 
| * C commit 2 
* | B commit on master 
|/ 
* A (master) 

प्रारंभ पहले एक (लग रहा है। आप मर्ज प्रतिबद्ध दोनों master और your_branch, लेकिन नहीं सहित प्रतिबद्ध की एक सूची दिखाई देगी। pickB या C, समय के आधार पर) और squash शेष।

+0

यह काम किया। लेकिन क्या आप मुझे "सिद्धांत" के बारे में बता सकते हैं कि यह क्यों काम करता है? – Miral

+1

बिल्कुल, [इस आलेख] को देखें (https://www.atlassian.com/git/tutorials/merging-vs-rebasing/workflow-walkthrough) और यदि आपके पास कुछ विशिष्ट प्रश्न हैं तो फिर से टिप्पणी करें। –

+0

फिर से देख रहे हैं (और एक खिलौना रेपो के साथ खेल रहे हैं), ऐसा लगता है कि 'गिट रीबेज -आई मास्टर' ने भी ठीक काम किया होगा, और इसमें आपके 'स्क्वैश' में 'मास्टर' प्रतिबद्धता शामिल नहीं होगी। क्या आप पहले क्या कोशिश कर रहे थे? क्या गलत हो रहा था? –

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