Git: "वर्तमान में किसी भी शाखा में नहीं है।" क्या बदलावों को ध्यान में रखते हुए, एक शाखा पर वापस जाने का एक आसान तरीका है?


201

इसलिए मैंने रिपॉजिटरी में कुछ काम किया है और जब मैं करने जा रहा हूं तो मुझे एहसास हुआ कि मैं किसी भी शाखा में नहीं हूं।

यह बहुत कुछ होता है जब सबमॉड्यूल्स के साथ काम करना और मैं इसे हल करने में सक्षम हूं, लेकिन प्रक्रिया थकाऊ है और मैं सोच रहा हूं कि ऐसा करने का एक आसान तरीका होना चाहिए।

क्या बदलावों को ध्यान में रखते हुए, एक शाखा पर वापस जाने का एक आसान तरीका है?

जवाबों:


213

यदि आपने प्रतिबद्ध नहीं किया है:

git stash
git checkout some-branch
git stash pop

अगर आपने कुछ किया है और तब से कुछ नहीं बदला है:

git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}

यदि आपने काम किया है और फिर अतिरिक्त काम किया है:

git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop

16
यदि आपने पहले से ही प्रतिबद्ध है तो यह मदद नहीं करता है। हालांकि यह सवाल में निर्दिष्ट नहीं किया गया था, लेकिन कोई डाउनवोट नहीं है।
डीन राथर

24
यदि आप पहले से ही प्रतिबद्ध हैं: आपके द्वारा किए गए कमिट (उपयोग git showया git rev-parse HEAD) के हैश पर ध्यान दें , शाखा पर जाएँ और फिर उसके git cherry-pickबाद कमिट हैश।
araqnid

7
यदि प्रतिबद्ध है, तो अंतिम वचन का हैश प्राप्त करें। शाखा आप पर नहीं बने रहना चाहते Checkout, औरgit merge _hash_
डैनियल

वास्तव में सावधान रहें। यदि आपने परिवर्तन किया है और आप इन चरणों का पालन करते हैं ... तो आपको संदेश दिखाई देगा ... "आपकी शाखा और मूल / स्वामी ने विचलन कर दिया है"।
थिंकानोथेरोन

1
@thinkanotherone यदि आपने अपने बदलाव किए हैं तो पहले से ही कुछ भी नहीं होगा और एक अलग शाखा की जाँच करना दुनिया का अंत नहीं है। आपके द्वारा अभी-अभी की गई प्रतिबद्धता अभी भी है और आप इसका उपयोग करके उस शाखा में विलय कर सकते हैं git merge <hash-of-the-commit-you-just-made>
एरिक बी

160

इससे मुझे मदद मिली

git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch

25
यदि आप पहले से ही कई कमिट कर चुके हैं, तो आपको यही करना होगा।
बेंजामिन मार्क

यह कोशिश नहीं की है, लेकिन ऐसा लगता है कि यह काम करेगा। हालाँकि मुझे लगता है कि यह एक असंभावित परिदृश्य है। मेरा मानना ​​है कि अधिकांश लोग महसूस करेंगे कि वे प्रतिबद्ध होने से पहले किसी भी शाखा में नहीं हैं और इसे ठीक करने के लिए स्वीकृत उत्तर का उपयोग करते हैं।
एरिक बी

49
आपको आश्चर्य होगा।
एरिक

@ ErikB मुझे पता भी नहीं था कि ब्रांच में नहीं होने के कारण ऐसा कुछ होता है। यह जवाब मेरे लिए बहुत मददगार था।
कॉन्स्टेंटिन शुबर्ट

2
प्यारा जवाब, वास्तव में इसे टाइप किया और काम किया, एक जीआईटी शुरुआत के रूप में सामना किया गया सब कुछ के विपरीत - आप यह बताना चाहेंगे कि न्यूब्रांच एक नामदार नाम है और एक प्रतिबद्ध हैश के साथ प्रतिस्थापित करने का इरादा नहीं है
लेघ

22
git checkout master

परिणाम कुछ इस तरह है:

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

1e7822f readme
0116b5b returned to clean django

If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e

तो ये करते है:

git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e

मैंने इसकी कोशिश नहीं की, लेकिन ऐसा लगता है कि यह ठीक काम करेगा। मुझे लगता है कि यदि आप git gcउन दो आदेशों को चलाने के बीच में चलेंगे, तो आप उन कमिटों को खो देंगे, लेकिन जब तक आप git gcस्वचालित रूप से नहीं चलेंगे, तब तक यह काफी जोखिम मुक्त दृष्टिकोण होना चाहिए। मैं अभी भी बाबे के जवाब के साथ जाऊंगा, लेकिन अगर आप दो अतिरिक्त कमांड लिखने से खुद को बचाना चाहते हैं, तो मुझे लगता है कि यह रास्ता है।
एरिक बी

मैंने किसी समय मास्टर शाखा छोड़ दी थी, मुझे पूरी तरह यकीन नहीं है। मैंने अपने परिवर्तनों की सराहना की थी, गुरु पर कोई परिवर्तन नहीं थे। इन निर्देशों ने मेरे परिवर्तन को मास्टर शाखा में लाया और सभी को अच्छा किया।
मत्ती जोकिपि

+1 मैं कमिट्स को पीछे छोड़ते हुए दूसरी शाखा की जाँच करने से घबरा गया था, इस संदेश को देखकर इसके लिए जाने का आत्मविश्वास बढ़ा।
21:39 पर J-Dizzle

11

यहां से दूसरा रास्ता छोड़कर

git branch newbranch
git checkout master 
git merge newbranch 

3
@ ErikB उन्होंने कई काम किए होंगे। उस मामले में, बाबे का जवाब देखें।
बेंजामिन ने

@BenjaminOakes ऐसा हो सकता है, लेकिन ये git कमांड भी मान्य नहीं हैं।
एरिक बी

@ एरिकबी निश्चित रूप से सच है। :) बाबे का जवाब एलेक्स के रूप में क्या करने की कोशिश कर रहा है का मान्य रूप है।
बेंजामिन ने

9

वैकल्पिक रूप से, आप अपने सबमॉड्यूल्स को सेटअप कर सकते हैं ताकि उनके डिफ़ॉल्ट अलग किए गए हेड स्टेट में होने के बजाय आप एक शाखा की जांच कर सकें।

जोड़ने के लिए संपादित:

जब आप -b ध्वज के साथ जोड़ते हैं, तो एक तरीका सबमॉड्यूल की किसी विशेष शाखा की जांच करना है:

git submodule add -b master <remote-repo> <path-to-add-it-to>

दूसरा तरीका यह है कि आप सबमॉड्यूल डायरेक्टरी में जाएं और इसे देखें

git checkout master

1
क्या आप मुझे बता सकते हैं कि उसे कैसे करना है?
एरिक बी

क्या किसी मौजूदा सबमॉडल को इस डिफ़ॉल्ट शाखा मोड को अपडेट करने का कोई तरीका है? gitmodulesशायद अद्यतन ?
हर्टजेल गिनीज

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

5

इस स्थिति को समाप्त करने का एक तरीका दूरस्थ शाखा से छूट देने के बाद है। इस मामले में, नए कमिट्स द्वारा इंगित किए जाते हैं, HEADलेकिन masterउन्हें इंगित नहीं करता है - यह उस ओर इशारा कर रहा है, जहां आपने दूसरी शाखा को रिबूट करने से पहले इसे कहीं भी इंगित किया था।

आप masterऐसा करके अपना नया बना सकते हैं:

git branch -f master HEAD
git checkout master

यह आपको (बिना आपको लगाए ) masterइंगित करने के लिए जबरन अपडेट करता है फिर स्विच HEADऑन masterकरता है master


आवश्यकतानुसार पूरी तरह से काम किया। मैंने पहले ही फाइलों का मंचन किया था और प्रतिबद्ध था, लेकिन उपरोक्त त्रुटि के कारण धक्का देने में असमर्थ था। कोड की दो पंक्तियों से ऊपर पूरी तरह से ठीक काम किया और उम्मीद के मुताबिक मेरे कोड को धक्का दिया।
अजेयबलमफी

4

मैं हाल ही में फिर से इस समस्या में भाग गया। जब से मैंने आखिरी बार सबमॉडल्स के साथ काम किया है और जीआईटी के बारे में अधिक सीखा है, मुझे एहसास हुआ कि जिस ब्रांच पर आप कमिटमेंट करना चाहते हैं, वह पर्याप्त है। अगर आप इसे डंक नहीं मारते हैं, तो भी Git काम कर रहे पेड़ को रखेगा।

git checkout existing_branch_name

यदि आप एक नई शाखा पर काम करना चाहते हैं तो यह आपके लिए काम करना चाहिए:

git checkout -b new_branch_name

चेकआउट विफल हो जाएगा यदि आपके पास काम करने वाले पेड़ में संघर्ष है, लेकिन यह काफी असामान्य होना चाहिए और यदि ऐसा होता है तो आप इसे रोक सकते हैं, इसे पॉप कर सकते हैं और संघर्ष को हल कर सकते हैं।

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


2

निम्नलिखित विधि काम कर सकती है:

git rebase HEAD master
git checkout master

यह मास्टर के शीर्ष पर आपके वर्तमान HEAD परिवर्तनों को वापस कर देगा। फिर आप शाखा को स्विच कर सकते हैं।


वैकल्पिक तरीका यह है कि पहले शाखा की जाँच करें:

git checkout master

फिर Git को आपके अलग किए गए कमानों का SHA1 प्रदर्शित करना चाहिए, फिर आप उन्हें चुन सकते हैं, उदा

git cherry-pick YOURSHA1

या आप नवीनतम को भी मर्ज कर सकते हैं:

git merge YOURSHA1

अपनी सभी शाखाओं को विभिन्न शाखाओं से देखने के लिए (यह सुनिश्चित करने के लिए कि आपने उन्हें बनाया है), चलाएँ git reflog:।


0

मुझे पता है कि मैंने 2012 में बाबे से कहा था कि मुझे लगता है कि यह संभावना नहीं थी कि किसी को एहसास नहीं होगा कि वे एक शाखा और प्रतिबद्ध नहीं थे। यह सिर्फ मेरे साथ हुआ है, इसलिए मुझे लगता है कि मुझे यह स्वीकार करना होगा कि मैं गलत था, लेकिन यह देखते हुए कि 2016 तक यह मेरे साथ होने के लिए था, आप तर्क दे सकते हैं कि यह वास्तव में संभावना नहीं है।

वैसे भी, एक नई शाखा बनाना मेरी राय में ओवरकिल है। तुमको बस यह करना है:

git checkout some-branch
git merge commit-sha

यदि आपने दूसरी शाखा की जाँच करने से पहले कमिट-शा की नकल नहीं की है, तो आप इसे चलाकर आसानी से पा सकते हैं:

git reflog

यह एक आदमी के लिए एक दुर्लभ (असंभावित) मुद्दा है। 2012 के बाद से मेरे साथ ऐसा नहीं हुआ। लेकिन अगर आपने जितने यूजर्स को मौका दिया है ... तो यह बहुत संभव है। यह किसी के लिए हर दिन हो सकता है। :)
बाबे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.