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


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

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

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


2512
2017-09-08 15:57


मूल




जवाब:


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

git checkout -b <new-branch>

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

git add <files>

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

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

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

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


2966
2017-09-08 15:59



बस यह सुनिश्चित करने के लिए, मुझे अपनी मूल शाखा को रीसेट करने से पहले अधूरा फीचर करने की ज़रूरत है? या क्या उन अनमोल फाइलों को काम करने के बावजूद संरक्षित किया जाएगा? - Dane O'Connor
एफवाईआई: कार्यशील निर्देशिका में परिवर्तन और सूचकांक में किए गए परिवर्तन शाखा से संबंधित नहीं हैं। git checkout -b <new branch> वे परिवर्तन जहां वे परिवर्तन समाप्त हो जाएंगे। - Jakub Narębski
यदि आपके पास पहले से ही एक शाखा है और आप मौजूदा शाखा में अपने परिवर्तनों को स्थानांतरित करना चाहते हैं, तो चेकआउट stackoverflow.com/questions/556923/... - Chirantan
यदि आप अपनी नई शाखा को रिमोट रिपोजिटरी में धक्का देना चाहते हैं: stackoverflow.com/questions/2765421/... - Dewayne
@ जेडीएसमिथ: असामान्य परिवर्तन ऐसा न करें किसी भी शाखा से संबंधित है। वे केवल कार्यशील निर्देशिका में रहते हैं git checkout ./git reset --hard अप्राप्य रूप से होगा हटाना उन्हें - knittl


वैकल्पिक रूप से:

  1. वर्तमान परिवर्तनों को एक अस्थायी स्टैश में सहेजें:

    $ git stash

  2. इस स्टैश के आधार पर एक नई शाखा बनाएं, और नई शाखा में स्विच करें:

    $ git stash branch <new-branch> stash@{0}

युक्ति: स्टैश नाम टाइप करने को कम करने के लिए टैब कुंजी का उपयोग करें।


254
2018-06-19 00:18



यदि दूसरी शाखा पहले से मौजूद है, तो आप चेकआउट के साथ बस उस पर स्विच कर सकते हैं git stash apply। - Archonic
स्वीकृत समाधान से बेहतर - Jonathan Landrum
मुझे टिप समझ में नहीं आता "युक्ति: स्टैश नाम टाइप करने को कम करने के लिए टैब कुंजी का उपयोग करें।"। क्या "नाम @ {0}" नाम नहीं है? मैं इसे सफलतापूर्वक नहीं चला सकता। - Herbert
स्वीकार्य उत्तर से यह बेहतर क्यों है stackoverflow.com/a/1394804/754997 ? - Chris Page
मुझे समझ में नहीं आता कि यह बेहतर क्यों है, इसके स्वीकार्य उत्तर git checkout -b <new branch name> - Noitidart


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

  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 तो वह कॉन्फ़िगरेशन खो जाएगा।

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


35
2018-02-12 07:44



यह एक प्रश्न का उत्तर देता है जो ओप से पूछा गया उससे थोड़ा अलग है। मैंने यह जवाब यहां देने का फैसला किया क्योंकि यह वह जगह है जहां Google ने मुझे जवाब देने के लिए लाया था। वास्तविक स्थिति जो इस स्थिति से संबंधित है यहाँ है। - joeytwiddle


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

git cherry-pick <commitID>

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


15
2017-11-30 20:58



आंशिक परिवर्तनों को एक नई शाखा में स्थानांतरित करने के लिए अच्छा समाधान ... क्योंकि आप जो भी चाहते हैं उसे प्रतिबद्ध कर सकते हैं, अन्य सभी परिवर्तनों को छूएं, जिस शाखा से आप शाखा बनाना चाहते हैं उसे देखें, चेरी-पिक जो नई शाखा पर प्रतिबद्ध है, वापस जाएं मूल शाखा में, एक प्रतिबद्धता को वापस रीसेट करें, फिर एक स्टैश पॉप करें, जोड़ें, प्रतिबद्ध करें और हेललुजा गाएं। - Meredith
@Meredith, हाहा, या ऐसा कुछ। यह बहुत अच्छा है, जब तक आप आगे अपने परिवर्तन की योजना नहीं बनाते ... और यह कौन करता है;) - password
धन्यवाद, आपने अभी मेरी डिजिटल गर्दन को बचा लिया है - Phil