git - गिट में एक नई शाखा में मौजूदा, असामान्य काम को ले जाएं




git-branch git-stash (4)

मैंने एक नई सुविधा पर कुछ काम शुरू किया और थोड़ी देर के लिए कोडिंग के बाद, मैंने फैसला किया कि यह सुविधा अपनी शाखा में होनी चाहिए।

मैं मौजूदा अपूर्ण परिवर्तनों को एक नई शाखा में कैसे स्थानांतरित कर सकता हूं और अपना वर्तमान रीसेट कर सकता हूं?

मैं नई सुविधा पर मौजूदा काम को संरक्षित करते हुए अपनी वर्तमान शाखा को रीसेट करना चाहता हूं।


निम्न का उपयोग करें:

git checkout -b <new-branch>

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

git add <files>

और अपनी नई शाखा के साथ प्रतिबद्ध:

git commit -m "<Brief description of this commit>"

कार्यशील निर्देशिका में परिवर्तन और अनुक्रमणिका में किए गए परिवर्तन अभी तक किसी भी शाखा से संबंधित नहीं हैं। यह परिवर्तन करता है जहां वे परिवर्तन समाप्त हो जाएंगे।

आप अपनी मूल शाखा को रीसेट नहीं करते हैं, यह वैसे ही रहता है। <old-branch> पर अंतिम प्रतिबद्धता अभी भी वही होगी। इसलिए आप checkout -b और फिर प्रतिबद्ध करते हैं।


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

git cherry-pick <commitID>

यहां वर्णित अनुसार, चेरी-पिक के साथ आप बहुत कुछ कर सकते हैं, लेकिन यह आपके लिए उपयोग-मामला हो सकता है।


सामान्य परिदृश्य निम्नलिखित है: मैं नई सुविधा के लिए नई शाखा बनाना भूल गया था, और पुरानी फीचर शाखा में सभी काम कर रहा था। मैंने मास्टर शाखा में सभी "पुराने" काम किए हैं, और मैं चाहता हूं कि मेरी नई शाखा "मास्टर" से बढ़े। मैंने अपने नए काम की एक प्रतिबद्धता नहीं बनाई है। शाखा संरचना यहां दी गई है: "मास्टर" -> "ओल्ड_फेचर"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

यदि आप कोड करते समय अपनी मुख्य शाखा पर काम कर रहे हैं, लेकिन अब आप उन लोगों को एक अलग शाखा में ले जाना चाहते हैं:

  1. अपने वर्तमान इतिहास को एक नई शाखा में कॉपी करें, जो कि किसी भी असामान्य परिवर्तन के साथ भी लाएगा:

    git checkout -b <new-feature-branch>
    
  2. अब मूल "गन्दा" शाखा को वापस रोल करने के लिए मजबूर करें: (इसे स्विच किए बिना)

    git branch -f <previous-branch> <earlier-commit-id>
    

    उदाहरण के लिए:

    git branch -f master origin/master
    

    या यदि आपने 4 काम किए हैं:

    git branch -f master HEAD~4
    

चेतावनी: ऐसा प्रतीत होता है कि git branch -f master origin/master उस शाखा के लिए ट्रैकिंग जानकारी को रीसेट कर देगा। इसलिए यदि आपने अपनी master शाखा को origin/master अलावा कहीं और धक्का देने के लिए कॉन्फ़िगर किया है तो वह कॉन्फ़िगरेशन खो जाएगा।

इस रीसेट तकनीक का उपयोग करने का एक विकल्प है। लेकिन वे निर्देश आपके पास किसी भी असामान्य परिवर्तन को त्याग देंगे। यदि आप उन्हें रखना चाहते हैं, तो उन्हें पहले छेड़छाड़ करें और अंत में उन्हें अनस्टैश करें।





git-reset