full - integrate git bash with visual studio code




फीचर शाखा में गिट मास्टर मास्टर (4)

आप अपनी फीचर शाखा में आवश्यक सटीक प्रतिबद्धताओं को खींचने के लिए "चेरी-पिक" करने में सक्षम हो सकते हैं।

हॉटफिक्स 1 शाखा पर जाने के लिए git checkout hotfix1 करें। फिर प्रश्न में प्रतिबद्धता के SHA1 हैश (यादृच्छिक अक्षरों और संख्याओं की विशिष्ट अनुक्रम जो विशिष्ट रूप से एक प्रतिबद्धता की पहचान करते हैं) प्राप्त करने के लिए एक git log करें। कॉपी करें (या पहले 10 या तो अक्षर)।

फिर, अपनी सुविधा शाखा पर वापस जाने के लिए git checkout feature1 सुविधा 1।

फिर, git cherry-pick <the SHA1 hash that you just copied>

वह उस प्रतिबद्धता को खींच देगा, और केवल आपकी सुविधा शाखा में ही प्रतिबद्ध होगा। वह परिवर्तन शाखा में होगा - आप बस इसे "चेरी-पिक" में डाल देंगे। फिर, अपने दिल की सामग्री में काम, संपादन, प्रतिबद्ध, पुश इत्यादि फिर से शुरू करें।

आखिरकार, जब आप एक शाखा से अपनी फीचर शाखा (या इसके विपरीत) में एक और विलय करते हैं, तो गिट यह पहचान लेगा कि आप पहले से ही उस विशेष प्रतिबद्धता में विलय कर चुके हैं, जानते हैं कि इसे फिर से बनाना नहीं है, और बस "इसे खत्म करो"।

आइए कहें कि हमारे पास गिट में निम्न स्थिति है:

  1. एक निर्मित भंडार:

    mkdir GitTest2
    cd GitTest2
    git init
    
  2. मास्टर में कुछ संशोधन होते हैं और प्रतिबद्ध हो जाते हैं।

    echo "On Master" > file
    git commit -a -m "Initial commit"
    
  3. फ़ीचर 1 मास्टर ऑफ ब्रांच किया गया और कुछ काम किया गया है:

    git branch feature1
    git checkout feature1
    echo "Feature1" > featureFile
    git commit -a -m "Commit for feature1"
    
  4. इस बीच, मास्टर-कोड में एक बग की खोज की गई है और हॉटफिक्स-शाखा स्थापित है

    git checkout master
    git branch hotfix1
    git checkout hotfix1
    
  5. बग हॉटफिक्स शाखा में तय किया गया है और मास्टर में वापस विलय हो गया है (शायद पुल अनुरोध / कोड समीक्षा के बाद):

    echo "Bugfix" > bugfixFile
    git commit -a -m "Bugfix Commit"
    git checkout master
    git merge --no-ff hotfix1
    
  6. फीचर 1 पर विकास जारी है:

    git checkout feature1
    

अब मेरा प्रश्न: कहें कि मुझे अपनी फीचर शाखा में हॉटफिक्स चाहिए, शायद क्योंकि बग भी वहां होता है। मैं अपनी फीचर शाखा में काम करने के बिना इसे कैसे प्राप्त कर सकता हूं? मैं अपनी फीचर शाखा पर दो नए काम करने से रोकना चाहता हूं, जिनके पास फीचर कार्यान्वयन का कोई संबंध नहीं है। अगर मैं पुल अनुरोधों का उपयोग करता हूं तो यह विशेष रूप से मेरे लिए महत्वपूर्ण लगता है: इन सभी कामों को पुल अनुरोध में भी शामिल किया जाएगा और इसकी समीक्षा की जानी चाहिए हालांकि यह पहले से ही किया जा चुका है (क्योंकि हॉटफिक्स पहले से ही मास्टर में है)।

मैं एक git merge master --ff-only नहीं कर सकता git merge master --ff-only : "घातक: तेजी से आगे बढ़ना, निरस्त करना संभव नहीं है।", लेकिन मुझे यकीन नहीं है कि इससे मुझे मदद मिली है।


आप मास्टर पर अपनी शाखा को पुनर्जीवित करने में सक्षम होना चाहिए:

git checkout feature1
git rebase master

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

git rebase --skip

यदि आप अपनी फीचर शाखा पर git log करते हैं, तो आप केवल एक बार, और मास्टर भाग में बगफिक्स प्रतिबद्ध दिखाई देंगे।

अधिक विस्तृत चर्चा के लिए, गिट git rebase ( https://git-scm.com/docs/git-rebase ) पर गिट बुक डॉक्स पर एक नज़र डालें जो इस सटीक उपयोग के मामले को कवर करता है।


इस लेख पर निर्भर होना चाहिए:

  • नई शाखा बनाएं जो मास्टर के नए संस्करण पर आधारित है
  • अपनी पुरानी फीचर शाखा को नए में विलय करें
  • नई सुविधा शाखा पर संघर्ष का समाधान करें

इस तरह आपका इतिहास स्पष्ट रहता है क्योंकि आपको वापस विलय की आवश्यकता नहीं है। और आपको बहुत सावधान रहने की आवश्यकता नहीं है क्योंकि आपको गिट रिबेस की आवश्यकता नहीं है


ज़ीमी का जवाब आम तौर पर इस प्रक्रिया का वर्णन करता है। यहां विनिर्देश दिए गए हैं:

1) एक नई शाखा बनाएँ और स्विच करें। सुनिश्चित करें कि नई शाखा master पर आधारित है, इसलिए इसमें हालिया हॉटफिक्सेस शामिल होंगे।

git checkout master
git branch feature1_new
git checkout feature1_new

# Or, combined into one command:
git checkout -b feature1_new master

2) नई शाखा में स्विच करने के बाद, अपनी मौजूदा फीचर शाखा से परिवर्तन मर्ज करें। यह हॉटफिक्स प्रतिबद्धताओं को डुप्लिकेट किए बिना आपकी प्रतिबद्धताओं को जोड़ देगा।

git merge feature1

3) नई शाखा पर, अपनी सुविधा और मास्टर शाखा के बीच किसी भी संघर्ष को हल करें।

किया हुआ! अब अपनी सुविधा विकसित करना जारी रखने के लिए नई शाखा का उपयोग करें।







git