git: हेड को अलग किए बिना स्विच ब्रांच


102

मेरे पास एक मुख्य शाखा (मास्टर) और कुछ प्रयोगात्मक कार्यों के लिए एक शाखा के साथ जीथब पर भंडार है। मैंने कुछ कमिट किए और प्रायोगिक शाखा को धक्का दिया और सब कुछ ठीक था।

अब, एक अलग मशीन पर, मैं अपनी रिपॉजिटरी (git क्लोन रिपॉजिटरी ) को क्लोन करने की कोशिश करता हूं और फिर प्रायोगिक शाखा में स्विच करता हूं (git checkout branchname ) लेकिन हर बार जब मैं ऐसा करता हूं तो मेरा सिर अलग हो जाता है और मैं इन बदलावों को धकेल नहीं सकता। मैं क्या गलत कर रहा हूं? मुझे लग रहा है कि मैं एक मौलिक git अवधारणा को याद कर रहा हूँ, लेकिन यादृच्छिक git मैन पेज पढ़ने से मुझे कोई सुराग नहीं मिल रहा है।

मैं नया हूँ, इसलिए मुझे खेद है कि अगर मैं एक बेवकूफ हूँ, लेकिन मुझे डॉक्स में कुछ भी नहीं मिल रहा है जो मुझे अपना सिर फिराने में मदद करेगा।

संपादित करें

एक ट्रैकिंग शाखा की अवधारणा वह है जो मुझे याद आ रही थी। अब जब मैंने उस अवधारणा को पूरा कर लिया है तो सब कुछ स्पष्ट है। व्यक्तिगत रूप से, मैं git branch --trackवाक्यविन्यास को बहुत अधिक सहज ज्ञान युक्त पाता हूं git checkout -b branch-name origin/branch-name

सहायता के लिए धन्यवाद!


सिर अलग करने, Git 2.23 (अगस्त 2019) के साथ के बिना शाखा जाने के लिए, उपयोग git switch: यह देखने के लिए नीचे दिए गए मेरा उत्तर
VonC

जवाबों:


115
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

सुविधा के लिए, आप लोकलनाम और ब्रांचनाम के लिए एक ही स्ट्रिंग का उपयोग कर सकते हैं
जब आपने चेक आउट किया था origin/branchnameतो आप वास्तव में एक शाखा की जाँच नहीं कर रहे थे। origin/branchnameएक "दूरस्थ" नाम है, और आप उनके साथ एक सूची प्राप्त कर सकते हैं

branch -a 

यदि आपके पास रंग सक्षम हैं, तो स्थानीय शाखाएं एक रंग की होंगी, और रिमोट दूसरी।

स्विच-टू करने और उस पर काम करने में सक्षम होने के लिए आपको पहले एक स्थानीय शाखा को ट्रैक करना होगा।


9
यार, "ट्रैक चेकआउट ओरिजिन / ब्रांचनाम" ​​क्यों नहीं होता है, यदि यह अभी तक ट्रैक नहीं किया गया है तो शाखा को स्वचालित रूप से ट्रैक करना शुरू कर देता है?
मार्टिन कॉनिसक

4
क्योंकि आपको अभी भी विदेशी शाखा के लिए स्थानीय नाम की आवश्यकता है।
केंट फ्रेड्रिक

यहाँ मैं क्या कर रहा हूँ, और त्रुटि संदेश: $ git चेकआउट -b विषय / लिफ़्ट अपस्ट्रीम / टॉपिक / फ़ेच घातक: git चेकआउट: अद्यतन पथ स्विचिंग शाखाओं के साथ असंगत है। क्या आपने 'अपस्ट्रीम / टॉपिक / भ्रूण' चेकआउट करने का इरादा किया था, जिसे कमिट नहीं किया जा सकता है?
अनु

2
रंगों के बारे में टिप के लिए धन्यवाद। रंगों को सक्षम करने के लिए:git config --global --add color.ui true
पोनीएर्स

1
यह ध्यान देने योग्य है कि "मूल / शाखामृग" का शाब्दिक अर्थ कुछ भी हो सकता है जो कि SHA1 या स्वयं में SHA1 के समान है)। मैं नियमित रूप से उपयोग करता हूं कि मनमानी जड़ों के साथ मनमानी शाखाएं बनाने के लिए।
केंट फ्रेड्रिक

16
git clone git@github.com:abc/def.git
cd def

अब एक ट्रैकिंग शाखा बनाएँ:

git branch --track experimental origin/experimental
git checkout experimental

फिर, वहाँ काम करने के बाद, बस द्वारा github धक्का

git push

3
git Branch -t उत्पत्ति / प्रायोगिक # को इतना टाइप करने की आवश्यकता नहीं है :)
डस्टिन

जिस शाखा को मैं ट्रैक करना चाहता हूं, उसे विषय / लिंच कहा जाता है। जब मैं $ git ब्रांच करने की कोशिश कर रहा हूं - ट्रैप टॉपिक / लिन्च अपस्ट्रीम / टॉपिक / लिंच, जो कहता है, घातक: नॉट अ वैलिड ऑब्जेक्ट नेम: 'अपस्ट्रीम / टॉपिक / लिंच'।
Ulu

1
@ डस्टिन, वह कमांड स्थानीय मास्टर को ट्रैक करने वाली एक स्थानीय शाखा 'मूल / प्रायोगिक' बनाता है। मैं अनुमान लगा रहा हूं कि यह काफी सामान्य गलती है।
21

1
@PDug% git चेकआउट -t मूल / प्रायोगिक शाखा प्रायोगिक शाखा की स्थापना की गई जो दूरस्थ शाखा को प्रायोगिक रूप से रिबासिंग द्वारा ट्रैक करने के लिए है। एक नई शाखा 'प्रायोगिक' पर स्विच किया गया
डस्टिन

11

केंट के उत्तर पर विस्तार करने के लिए, जब आप अपनी क्लोन एकमात्र शाखा करते हैं, तो आपके पास (वह है जो गिनती नहीं करता है) वह है जो आपके मामले में मास्टर - से रिपॉजिटरी में सक्रिय थी।

इसलिए, पहले आप दूरस्थ प्रयोगात्मक शाखा को ट्रैक करने के लिए एक नई शाखा बनाना चाहेंगे:

$ git branch experimental origin/experimental

और फिर इसे देखें:

$ git checkout experimental

हालांकि, केंट सही है - इन दो आदेशों को जोड़ा जा सकता है

$ git checkout -b experimental origin/experimental

3

Git 2.23 (अगस्त 2019) के साथ, आप कमांड का उपयोग करेंगेgit switch

यदि आपके पास एक ही नाम की दूरस्थ शाखा है, तो यह स्वचालित रूप से ट्रैक किया जाएगा:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.