मैंने स्थानीय रूप से एक निजी भंडार का क्लोन बनाया है जिसमें 3 शाखाएँ हैं - मास्टर, देव और स्टेजिंग। जब इसे क्लोन किया जाता है तो मैं मास्टर ब्रांच में होता हूं। जब मैं शाखाओं को सूचीबद्ध करता हूं:

git branch -a

मैं सभी शाखाओं को देखता हूं। जब मैं दौड़ता हूं:

git checkout dev

कुछ नहीं होता है और मैं अभी भी मास्टर शाखा में हूँ। मैंने अन्य शाखाओं को बिना किसी किस्मत के पाने के लिए खींचने और लाने की कोशिश की है। मैं यह नहीं समझ सकता कि किसी अन्य शाखा में कैसे स्विच किया जाए।

0
stanhook 26 मार्च 2020, 15:58
1
जब आप चेकआउट करने का प्रयास करते हैं तो क्या आपको कोई त्रुटि मिलती है?
 – 
Mureinik
26 मार्च 2020, 15:59
1
आप कैसे जानते हैं कि आप अभी भी master में हैं?
 – 
John Kugelman
26 मार्च 2020, 20:29
1
मेरे अनुमान के लिए मेरा उत्तर देखें। आप git checkout --track origin/dev का उपयोग करके समस्या से बच सकते हैं (या बाद के संस्करण में गिट को अपग्रेड करें ताकि यह केवल अस्पष्ट चीजें न करे)।
 – 
torek
27 मार्च 2020, 02:53
1
आपके द्वारा उपयोग की जाने वाली विधि (git branch --track dev origin/dev) ने dev को origin/dev के साथ इसके अपस्ट्रीम के रूप में सेट किया होगा, जो कि git checkout के "डू व्हाट माई मतलब" मोड में सभी सुविधा है। Git के पुराने संस्करणों के साथ समस्या यह है कि यदि कोई फ़ाइल या निर्देशिका है जिसका उसी नाम है, जिस शाखा का नाम आप बनाना या देखना चाहते हैं, तो ऐसा नहीं है गिट के लिए स्पष्ट है कि क्या आपका मतलब फ़ाइल या निर्देशिका या शाखा है।
 – 
torek
27 मार्च 2020, 18:55
1
Mac पर अधिकांश लोग इन दिनों सॉफ़्टवेयर के नए संस्करण स्थापित करने के लिए brew का उपयोग करते हैं। मेरे पास यही है (लेकिन मैंने उस मैक को 2.20.1 से अपडेट नहीं किया है)।
 – 
torek
27 मार्च 2020, 18:56

3 जवाब

सबसे बढ़िया उत्तर

यह एक अनुमान है, लेकिन मैंने व्यवहार को पुन: पेश किया है:

sh-3.2$ mkdir txx
sh-3.2$ cd txx
sh-3.2$ git init
Initialized empty Git repository in ...
sh-3.2$ echo test branch name thing > README.md
sh-3.2$ git add README.md
sh-3.2$ git commit -m initial
[master (root-commit) 7dc0be2] initial
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
sh-3.2$ echo this is a file named dev > dev
sh-3.2$ git add dev
sh-3.2$ git commit -m 'add file named dev'
[master ac01ba6] add file named dev
 1 file changed, 1 insertion(+)
 create mode 100644 dev
sh-3.2$ git remote add origin .
sh-3.2$ git update-ref refs/remotes/origin/master master
sh-3.2$ git update-ref refs/remotes/origin/dev master
sh-3.2$ echo foo >> dev
sh-3.2$ git checkout dev

ऐसा लगता है कि यहां कुछ नहीं हुआ है, लेकिन वास्तव में, कुछ हुआ: फ़ाइल dev को विनाशकारी रूप से चेक आउट किया गया था। यहाँ इसकी सामग्री है:

sh-3.2$ cat dev
this is a file named dev

और यह पुष्टि है कि हम अभी भी master पर हैं:

sh-3.2$ git status
On branch master
nothing to commit, working tree clean

working tree clean अपडेट किए गए dev को नष्ट करने का एक परिणाम है, इसे इंडेक्स से निकाली गई कॉपी के साथ git checkout द्वारा प्रतिस्थापित किया जाता है।

ध्यान दें कि इन सबके लिए Git के थोड़े पुराने संस्करण की आवश्यकता है:

sh-3.2$ git --version
git version 2.20.1

एक और आधुनिक हमें समस्या के बारे में बताता है। Git 2.24 में समान कार्य करने से उत्पन्न होता है:

$ git checkout dev
fatal: 'dev' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate

यही कारण है कि git checkout अब दो अलग-अलग कमांड हैं, git switch और git restoregit switch का उपयोग करना:

$ git switch dev
M       dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'

मनचाहा काम करता है।

5
torek 26 मार्च 2020, 23:53

मेरा अनुमान है कि आपने दूरस्थ शाखा नहीं लाई है। डिफ़ॉल्ट रूप से, git checkout को केवल एक शाखा मिलती है। आपको का संयोजन करने की आवश्यकता है

गिट फ़ेच

के बाद

गिट चेकआउट देव

उसके बाद, आपको का एक संदेश देखना चाहिए

शाखा 'देव' में स्विच किया गया

आपकी शाखा 'मूल/देव' के साथ अद्यतित है

0
Community 20 जून 2020, 12:12
- मैं git fetch और फिर git checkout dev भागा और कुछ नहीं हुआ। इसलिए मैं भ्रमित हूं। मूल रूप से मैंने git क्लोन <स्थान-की-भंडार> चलाया और यह मुझे मास्टर पर सेट करता है। मैं दौड़ता हूं: git fetch और ऐसा कुछ नहीं लगता। फिर गिट चेकआउट देव और यह स्विच नहीं करता है। मुझे कुछ याद आ रहा है।
 – 
stanhook
26 मार्च 2020, 16:07
मैंने इस्तेमाल किया (कोष्ठक के बिना {}): {गिट शाखा-आर | ग्रेप-वी '\->' | रिमोट पढ़ते समय; गिट शाखा करें --ट्रैक "${remote#origin/}" "$remote"; किया } और वह काम करने लग रहा था। मुझे कोई जानकारी नहीं है की क्यों। क्या कोई समझा सकता है?
 – 
stanhook
26 मार्च 2020, 16:30

आप कमांड के नीचे कोशिश कर सकते हैं और देख सकते हैं कि यह "गिट क्लोन --ब्रांच यूआरएल" काम करता है या नहीं, यह सभी शाखाओं को ला रहा है और उस शाखा की जांच कर रहा है जिसे हम निर्दिष्ट करते हैं।

-1
Pavan Tatikonda 26 मार्च 2020, 20:25