Git मर्ज हमें तेज़ी से प्रदर्शन करने की अनुमति देता है और कोई तेज़ तेज़ फ़ॉरवर्ड ब्रांच विलय नहीं करता है। किसी भी विचार जब तेजी से आगे मर्ज का उपयोग करें और कब तेजी से आगे मर्ज का उपयोग करने के लिए?
Git मर्ज हमें तेज़ी से प्रदर्शन करने की अनुमति देता है और कोई तेज़ तेज़ फ़ॉरवर्ड ब्रांच विलय नहीं करता है। किसी भी विचार जब तेजी से आगे मर्ज का उपयोग करें और कब तेजी से आगे मर्ज का उपयोग करने के लिए?
जवाबों:
--no-ff
जब आप अपने सुविधा शाखा का एक स्पष्ट धारणा है चाहता हूँ विकल्प उपयोगी है। इसलिए यदि इस बीच कोई कमिट नहीं किया गया था, तो भी एफएफ संभव है - आप अभी भी कभी-कभी चाहते हैं कि मेनलाइन में प्रत्येक एक फीचर के अनुरूप हो। तो आप एक इकाई के रूप में कमिट्स के एक समूह के साथ एक सुविधा शाखा का इलाज करते हैं, और उन्हें एक इकाई के रूप में मर्ज करते हैं। यह आपके इतिहास से स्पष्ट है जब आप सुविधा शाखा के साथ विलय करते हैं --no-ff
।
यदि आप ऐसी किसी चीज की परवाह नहीं करते हैं - तो आप जब भी संभव हो, एफएफ के साथ भाग सकते हैं। इस प्रकार आपके पास वर्कफ़्लो की तरह अधिक svn जैसी भावना होगी।
उदाहरण के लिए, इस लेख के लेखक का मानना है कि --no-ff
विकल्प डिफ़ॉल्ट होना चाहिए और उसका तर्क इस बात के करीब है कि मैंने ऊपर उल्लिखित किया है:
उस स्थिति पर विचार करें जहां "फ़ीचर" शाखा पर छोटी सी एक श्रृंखला सामूहिक रूप से एक नई सुविधा बनाती है: यदि आप बिना "git मर्ज feature_branch" करते हैं --no-ff
, तो "Git इतिहास से यह देखना असंभव है कि कौन से कमिटमेंट एक साथ हैं एक सुविधा लागू की - आपको मैन्युअल रूप से सभी लॉग संदेशों को पढ़ना होगा। एक पूरी सुविधा (यानी एक कमिट्स का समूह) को बदलना, एक सच्चा सिरदर्द है [अगर --no-ff
इसका उपयोग नहीं किया गया है], जबकि यह आसानी से किया जाता है अगर --no-ff
झंडा का उपयोग किया गया था [क्योंकि यह सिर्फ एक प्रतिबद्धता है] "।
--no-ff
बुनियादी उपकरणों का उपयोग करते समय आपके प्रतिबद्ध इतिहास के लाभों को तुरंत स्पष्ट नहीं किया जा सकता है git log
, जो कि उन सभी शाखाओं से सभी हिट दिखाना जारी रखेगा जिन्हें आपकी वर्तमान शाखा में विलय कर दिया गया है। कहा कि, जैसे git log --first-parent
एकीकरण शाखा पर develop
या जैसे का उपयोग करते समय लाभ स्पष्ट हो जाते हैं master
। यदि आप धार्मिक रूप से उपयोग करते हैं --no-ff
तो वह विशेष रूप से मर्ज अनुरोध प्रदर्शित git log
करेगा , जबकि अभी भी एक (अधिक) व्यापक इतिहास प्रदान करेगा। यही कारण है कि विंसेंट ने GitFlow के साथ उपयोग के लिए इसकी सिफारिश की है ।
मैं आमतौर पर परियोजना में देखा गया एक उदाहरण दे सकता हूं।
यहां, विकल्प --no-ff
(यानी सही मर्ज ) कई माता-पिता के साथ एक नई प्रतिबद्धता बनाता है, और एक बेहतर इतिहास ट्रैकिंग प्रदान करता है। अन्यथा, --ff
(यानी फास्ट-फॉरवर्ड मर्ज ) डिफ़ॉल्ट रूप से है।
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature' // => commit created at merge with proper message
commit 'finish the feature'
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*) ध्यान दें कि यदि newFeature
नई शाखा बनाने के बजाय, शाखा का फिर से उपयोग किया जाता है, तो गिट को --no-ff
वैसे भी मर्ज करना होगा । इसका मतलब है कि फास्ट फॉरवर्ड मर्ज हमेशा योग्य नहीं है।
जब हम विकास के वातावरण पर काम करते हैं और हमारे कोड को मचान / उत्पादन शाखा में विलय करते हैं तो आगे कोई तेजी से नहीं निकलना बेहतर विकल्प हो सकता है। आमतौर पर जब हम एक ही सुविधा के लिए विकास शाखा में काम करते हैं तो हम कई तरह के कमिट करते हैं। कई कमिट के साथ ट्रैकिंग परिवर्तन बाद में असुविधाजनक हो सकते हैं। अगर हम Git का उपयोग करते हुए स्टेजिंग / प्रोडक्शन ब्रांच के साथ विलय नहीं करते हैं तो यह केवल 1 कमिट होगा। अब कभी भी हम फीचर को वापस करना चाहते हैं, बस उस कमिट को वापस कर दें। जीवन आसान है।
यह भी संभव है कि कोई व्यक्ति वैयक्तिकृत सुविधा शाखाएँ रखना चाहे जहाँ कोड को दिन के अंत में रखा गया हो। यह बारीक विस्तार से विकास को ट्रैक करने की अनुमति देता है।
मैं गैर-कामकाजी कोड के साथ मास्टर विकास को प्रदूषित नहीं करना चाहूंगा, इस तरह से - कोई भी ऐसा नहीं हो सकता है।
एक साइड नोट के रूप में, व्यक्तिगत शाखा पर काम करने वाले कोड को करने के लिए आवश्यक नहीं हो सकता है, क्योंकि इतिहास को फिर से लिखा जा सकता है git rebase -i
और सर्वर पर तब तक मजबूर किया जा सकता है जब तक कि कोई और उसी शाखा पर काम नहीं कर रहा हो।