2015-06-10 9 views
6

में नई निर्देशिकाओं के आधार पर छोटे पीआर के स्प्लिट पुल अनुरोध में एक विशेषता शाखा का एक मोनोलिथ है। मास्टर में एक बड़े पीआर के बजाय मैं इसे 3 पीआर में विभाजित करना चाहता हूं।गिट: पुल अनुरोध

आदर्श रूप से मैं फीचर शाखा से कुछ स्टैंडअलोन कोड को पीआर में खींचना चाहता हूं। यह कोड एक नई निर्देशिका में है और अभी तक इसे कॉल नहीं किया गया है, इसलिए यह अपेक्षाकृत सुरक्षित पीआर होगा। हालांकि सिर्फ निर्देशिका की प्रतिलिपि बनाने और एक प्रतिबद्धता और पीआर बनाने की बजाय मैं नए पीआर के लिए परिवर्तन के सभी प्रतिबद्ध इतिहास को बनाए रखना चाहता हूं।

क्या यह गिट का उपयोग कर संभव है? मैंने फिल्टर-शाखा में देखा है, लेकिन ऐसा लगता है कि एक रेपो को दो में विभाजित करने के लिए है, दो में बदलावों के अंतर को विभाजित करने के लिए नहीं (अगर यह समझ में आता है)।

उत्तर

6

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

ऐसा लगता है कि आप अपनी मुख्य शाखा के बगल में 3 शाखाएं बनाने के लिए एक अच्छी रणनीति की तरह लग सकते हैं, चेरी-प्रत्येक शाखा में प्रासंगिक प्रतिबद्धता चुनें, उन्हें मुख्य रूप से हटा दें, और तीन शाखाओं में से प्रत्येक के साथ मुख्य विलय करें। फिर आप प्रत्येक शाखा के लिए पीआर और साझा इतिहास भी हो सकते हैं।

+0

क्षमा करें शायद मैं पर्याप्त स्पष्ट नहीं हो सकता था। मैं निर्देशिका के आधार पर कई शाखाओं में परिवर्तनों के सेट के साथ एक शाखा को विभाजित करना चाहता हूं। अर्थात।एक तरीका निर्देशिकाओं को केवल मास्टर की एक नई शाखा में कॉपी करेगा और प्रतिबद्ध होगा और पीआर बनायेगा लेकिन फिर वह उस निर्देशिका में फाइलों से जुड़े सभी प्रतिबद्ध इतिहास खो देगा। तो क्या एक शाखा से फ़ाइलों को खींचने का कोई तरीका है जिसमें एक नई शाखा में उनके प्रतिबद्ध इतिहास शामिल हैं? – user3768149

2

क्या एक शाखा से फ़ाइलों को खींचने का कोई तरीका है जिसमें एक नई शाखा में उनके प्रतिबद्ध इतिहास शामिल हैं?

आप खींच एक प्रतिबद्ध, एक शाखा में एक पूरे रेपो अर्थ ही नहीं, कुछ फ़ाइलें।

एक अच्छा विकल्प तो B1 से

--x--x--x (master) 
     \ 
      y--y--y (branch B1 with mixed work) 
       \ 
        z (new branch B2, but with some files reset to master) 

B2 शुरू होता है उनकी सामग्री पूर्व शाखा करने के लिए फ़ाइलों को आप नहीं चाहते पुनर्स्थापित करने के लिए हो सकता है और अपने इतिहास के साथ, फ़ाइलें आप चाहते हैं को शामिल किया जाएगा।
लेकिन B2 में B1 से अन्य फ़ाइलें भी शामिल हैं जिन्हें आप master के रूप में देखना चाहते हैं।

आप (B2 में) एक git reset --soft master कर सकते हैं: एक git status आप सभी परिवर्तनों को आप गुरु दर्शाने के लिए अपने सूचकांक के लिए आदेश में क्या करने की जरूरत बता जाएगा। बस उन परिवर्तनों को शामिल न करें जिनमें वे फ़ाइलें शामिल हैं जिन्हें आप रखना चाहते हैं।
और प्रतिबद्ध न करें। आप कुछ फ़ाइलों के लिए master पर परिवर्तनों को वापस लेना चाहते हैं।

(देखें भी "Practical uses of git reset --soft?")

एक बार यह हो जाता है, एक git reset --soft B2 चाल B2 करने के लिए वापस सिर (लेकिन एक सूचकांक सभी परिवर्तन और आवश्यक विलोपन रिकॉर्डिंग सही फ़ाइलों के लिए गुरु को प्रतिबिंबित करने के साथ)।

अब आप प्रतिबद्ध कर सकते हैं, अन्य फ़ाइलों को master पर वापस ले जाया गया है और जिन फ़ाइलों को आप बिना छेड़छाड़ करना चाहते हैं, उनके इतिहास के साथ B1 के समान।

+0

धन्यवाद एक टन! मैं इसे आज़माउंगा। – user3768149

+0

@ user3768149 नोट: एक बार HEAD को 'मास्टर', ('रीसेट - सॉफ्ट मास्टर') में ले जाया जाता है, तो आप उन अन्य फ़ाइलों के लिए सरल 'गिट चेकआउट - afile' कर सकते हैं जिन्हें आप' मास्टर 'पर रीसेट करना चाहते हैं, और छोड़ दें जिन फ़ाइलों को आप छेड़छाड़ करना चाहते हैं। हेड को 'बी 2' पर वापस ले जाने से आप "अन्य फाइलें" सामग्री (जो अब 'मास्टर' को प्रतिबिंबित कर रहे हैं) – VonC

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