मैं git में किसी अन्य शाखा में कैसे स्विच कर सकता हूं?


222

इनमें से कौन सी रेखा सही है?

git checkout 'another_branch'

या

git checkout origin 'another_branch'

या

git checkout origin/'another_branch'

और इन रेखाओं में क्या अंतर है?



32
git checkout [branch]इस सवाल पर आने वाले अधिकांश उपयोगकर्ताओं के लिए
JGallardo

जवाबों:


225

यदि another_branchपहले से ही स्थानीय रूप से मौजूद है और आप इस शाखा पर नहीं हैं, तो git checkout another_branchशाखा में बदल जाते हैं।

यदि another_branchमौजूद नहीं origin/another_branchहै, लेकिन करता है, तो git checkout another_branchइसके बराबर है git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch। इसके ऊपर another_branchसे बनाना origin/another_branchऔर सेट करना origin/another_branchहै another_branch

यदि मौजूद नहीं है, तो git checkout another_branchत्रुटि देता है।

git checkout origin another_branchअधिकांश मामलों में त्रुटि देता है। यदि originएक संशोधन है और another_branchएक फ़ाइल है, तो यह उस संशोधन की फ़ाइल की जांच करता है, लेकिन सबसे ज्यादा शायद यह नहीं है कि आप क्या उम्मीद करते हैं। originज्यादातर में प्रयोग किया जाता है git fetch, git pullऔर git pushएक दूरस्थ, दूरस्थ भंडार करने के लिए यूआरएल के उपनाम के रूप।

git checkout origin/another_branchorigin/another_branchमौजूद होने पर सफल होता है। यह किसी भी शाखा पर नहीं, अलग राज्य में होने की ओर जाता है। यदि आप नए कमिट करते हैं, तो नए कमिट किसी भी मौजूदा ब्रांच से उपलब्ध नहीं हैं और कोई भी ब्रांच अपडेट नहीं होगी।

अद्यतन :

जैसा कि 2.23.0 जारी किया गया है, इसके साथ हम git switchशाखाओं को बनाने और स्विच करने के लिए भी उपयोग कर सकते हैं ।

यदि fooमौजूद है, तो fooनिम्न पर स्विच करने का प्रयास करें :

git switch foo

तो fooमौजूद नहीं है और origin/fooमौजूद है, बनाने की कोशिश fooसे origin/fooऔर उसके बाद करने के लिए स्विच foo:

git switch -c foo origin/foo
# or simply
git switch foo

अधिक आम तौर पर, यदि fooमौजूद नहीं है , तो fooकिसी ज्ञात रेफ या कमिट से बनाने का प्रयास करें और उसके बाद स्विच करें foo:

git switch -c foo <ref>
git switch -c foo <commit>

यदि हम एक ही समय में गिटलैब और जीथब में एक भंडार का रखरखाव करते हैं, तो स्थानीय भंडार में दो originरीमोट हो सकते हैं, उदाहरण के लिए, गिटलब और गीथूब के githubलिए। इस मामले में भंडार है origin/fooऔर github/foogit switch fooशिकायत करेंगे fatal: invalid reference: foo, क्योंकि यह पता नहीं है कि किस रेफरी से, origin/fooया github/fooबनाने के लिए foo। हमें इसे आवश्यकता के अनुसार git switch -c foo origin/fooया उसके साथ निर्दिष्ट करना होगा git switch -c foo github/foo। यदि हम दोनों दूरस्थ शाखाओं से शाखाएँ बनाना चाहते हैं, तो नई शाखाओं के लिए विशिष्ट नामों का उपयोग करना बेहतर होगा:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

यदि fooमौजूद है, तो किसी ज्ञात रेफ या कमिट को फिर fooसे बनाने (या रीसेट fooकरने) से रीक्रिएट / फोर्स-क्रिएट करने की कोशिश करें और फिर स्विच करें foo:

git switch -C foo <ref>
git switch -C foo <commit>

जो इसके बराबर हैं:

git switch foo
git reset [<ref>|<commit>] --hard

किसी ज्ञात रेफ या प्रतिबद्ध के अलग किए गए हेड पर स्विच करने का प्रयास करें:

git switch -d <ref>
git switch -d <commit>

यदि आप केवल एक शाखा बनाना चाहते हैं, लेकिन उसके लिए स्विच नहीं करते हैं, तो git branchइसके बजाय उपयोग करें । किसी ज्ञात रेफ या कमिट से शाखा बनाने का प्रयास करें:

git branch foo <ref>
git branch foo <commit>

24
यह उत्तर सही है (हमेशा की तरह, और अपवर्तित), लेकिन मैं एक टिप्पणी जोड़ूंगा जो सहायक हो सकती है: git checkoutकमांड बहुत सारी चीजें करता है, मेरी राय में। यही कारण है कि यहां ऑपरेशन के बहुत सारे तरीके हैं। यदि केवल एक चीज git checkoutकिया था स्विच शाखाओं, इस सवाल का जवाब आसान होगा, लेकिन यह भी कर सकते हैं बनाने शाखाओं, और यहां तक कि विशिष्ट प्रतिबद्ध से फ़ाइलों को अलग बिना शाखाओं स्विचन।
torek

11
यह सही उत्तर है, लेकिन यह दिखाता है कि कैसे git थोड़े कमांड लाइन में खराब हो गया है। शाखा स्विच करने के लिए जाँच करें?
थांग

3
@ धनंग खैर, २.२३.० रिलीज के साथ, यह हटा दिया गया है: अब आप git switchएक शाखा पर स्विच करने के लिए उपयोग कर सकते हैं ।
लीजेंड्स 2k

स्विच इस संस्करण के लिए काम नहीं करता है। मैं git के इस संस्करण में किसी भिन्न शाखा में जाने के लिए क्या उपयोग करूं? C: \ widget> git --version git संस्करण 2.11.0.windows.3 C: \ विजेट> git स्विच मास्टर git: 'स्विच' कोई git कमांड नहीं है। 'Git --help' देखें। C: \ विजेट>
जॉन

1
का उपयोग @ जॉन git checkoutपुराने संस्करणों है, जो भी आधुनिक संस्करण में काम करता है के लिए बजाय।
एलपीकेय

66

गिट में दूसरी शाखा में स्विच करना। सीधा जवाब,

गिट-चेकआउट - शाखाओं को स्विच करें या कार्यशील ट्री फ़ाइलों को पुनर्स्थापित करें

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

शाखा स्विच करने से पहले सुनिश्चित करें कि आपके पास कोई भी संशोधित फाइल नहीं है, उस स्थिति में, आप बदलाव कर सकते हैं या आप इसे रोक सकते हैं।


अंतिम आदेश मुझे अलग राज्य में ले जाता है। इसका मतलब है कि कोई शाखा को संपादित नहीं कर सकता है।

2
जिस शाखा में आपका चेकआउट करने की कोशिश की जा रही है, वह नहीं है तो चेकआउट से पहले आपको लाने की जरूरत है। आप ब्रांच को छोड़ सकते हैं यदि ब्रांच डेट तक है तो सिर्फ git checkout branchname का उपयोग करें।
danglingpointer

क्या शाखा में जाने के बाद "गिट पुल" का प्रदर्शन करना पर्याप्त नहीं होगा?

पुल भी ठीक है, पुल को लाने और पृष्ठभूमि में एक साथ विलय होता है। मुझे कोई अंतर दिखाई नहीं देता।
danglingpointer

17

[ git checkout "branch_name"]

कहने का एक और तरीका है:

[ git checkout -b branch_name origin/branch_name]

यदि "Branch_name" केवल दूरस्थ रूप से मौजूद है ।

[ git checkout -b branch_name origin/branch_name] यदि आपके पास कई उपाय हैं तो यह उपयोगी है।

[ git checkout origin 'another_branch'] मुझे यकीन नहीं है कि यह संभव है, AFAK आप इसे "लाने" कमांड का उपयोग करके कर सकते हैं - [ git fetch origin 'another_branch']


मैं एक और शाखा बनाने के लिए कमांड "git चेकआउट -b ब्रांचनाम" ​​जानता हूं। यह सवाल नहीं था!

10

साथ Git 2.23 के बाद से, एक का उपयोग कर सकते हैं git switch <branch name>शाखाओं स्विच करने के लिए।


6

मेरे लिए क्या काम निम्नलिखित है:

आवश्यक शाखा में स्विच करें:

git checkout -b BranchName

और फिर मैंने "मास्टर" को इसके द्वारा खींच लिया:

git pull origin master

6

दैनिक जीवन में काम करने के लिए उपयोगी आदेश:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

यदि आप चाहते हैं कि शाखा दूरस्थ शाखा को ट्रैक करे, जो बहुत ही आयात है यदि आप शाखा में परिवर्तन करने जा रहे हैं और परिवर्तन को खींच रहे हैं आदि, तो आपको वास्तविक चेकआउट के लिए ऐड-टी का उपयोग करने की आवश्यकता है: git checkout -t branchname


4

जाँच : git branch -a

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

  • चरण 1 : git config --list
  • चरण 2 : git config --unset remote.origin.fetch
  • चरण 3 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
मुझे आश्चर्य है कि आदेशों की यह श्रृंखला दूसरी शाखा में कैसे बदल जाएगी।

यह तब उपयोगी हो सकता है जब आपने पहले एक उथले क्लोन ( depthपरम का उपयोग करके ) किया था और अब आश्चर्य है कि आप error: pathspec 'another_branch' did not match any file(s) known to gitऊपर बताए गए आदेशों का उपयोग करके दूसरी दूरस्थ शाखाओं को क्यों नहीं ला सकते हैं । यह निश्चित रूप से नहीं है कि मूल प्रश्न किस बारे में था, लेकिन यह दूसरों को यहां अपना सिर खरोंच करने में मदद कर सकता है।
लूसीश डी '

0

मैं इसका उपयोग एक शाखा को किसी दूसरे पर स्विच करने के लिए कर रहा हूं, आप इसे मेरे लिए आकर्षण की तरह काम कर सकते हैं।

git स्विच [शाखा का नाम] या git चेकआउट [शाखा का नाम]

पूर्व: git स्विच विकसित या
git चेकआउट विकसित

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.