क्या पिछली शाखा को चेकआउट करने का कोई तरीका है?


704

मैं cd -गिट के लिए बराबर चाहता हूं । यदि मैं शाखा में masterहूं और मैं चेकआउट fooकरता हूं, तो मैं git checkout -वापस जाने के लिए कुछ टाइप करने में सक्षम होना पसंद करूंगा master, और वापस लौटने के लिए इसे फिर से टाइप करने में सक्षम होना चाहूंगा foo

क्या ऐसा कुछ भी मौजूद है? क्या इसे लागू करना कठिन होगा?


2
मैं अपने पिछले git चेकआउट कमांड को खोजने के लिए UP तीर टाइप करना चाहूँगा: p
किट हो

11
जिसमें घर की स्थिति से अपने हाथों को हिलाना शामिल है, टाइपिंग gc- तेजी से है, तब तक ऊपर दबाएं जब तक आप यह नहीं पाते कि आप क्या देख रहे हैं
मैट ब्रिग्स

@MattBriggs आप वास्तव में टाइप करते हैं gc-या उस शॉर्टहैंड के लिए थेgit checkout -
jewbix.cube

2
@ jewbix.cube आपको अपने शेल और गिट के लिए, उपनामों के बारे में जानने की आवश्यकता है।
गौथियर

@ किथो: मैं खुद को लगातार ऐसा करना चाहता हूं, लेकिन मैं चाहता हूं कि इतिहास में भी मौजूद नहीं हो सकता है, उदाहरण के लिए, मैंने सिर्फ शाखा बनाई है।
M_M

जवाबों:


1228

1.6.2 के लिए जारी नोट्स से

@{-1}आपके द्वारा अंतिम शाखा को संदर्भित करने का एक तरीका है। यह
न केवल जहां एक ऑब्जेक्ट नाम की अपेक्षा की जाती है, स्वीकार किया जाता है, लेकिन कहीं भी एक शाखा का नाम अपेक्षित होता है और यह कार्य करता है जैसे कि आपने शाखा का नाम टाइप किया है।
जैसे git branch --track mybranch @{-1}, git merge @{-1}और
git rev-parse --symbolic-full-name @{-1}उम्मीद के मुताबिक काम करेंगे।

तथा

git checkout -के लिए एक आशुलिपि है git checkout @{-1}


46
वाह, मैं पूरी तरह से यह कोशिश करनी चाहिए थी! लगा - एक शेल-आईएसएम था, और अगर कार्यक्षमता गिट में थी, तो यह कुछ अलग होगी
मैट ब्रिग्स

9
जब आप एक प्रतिबद्ध SHA को दो बार चेक करते हैं, तो यह अच्छी तरह से काम नहीं करता है, जिस स्थिति में @ {- 1} आपको पहले चेकआउट से पहले
इंगित करता है

1
मैं ZSH का उपयोग कर रहा हूं, और मुझे उद्धरणों में @ {- 1} लपेटना था। अन्यथा गिट चोक:error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
मर्फी Randle

14
यह शायद पहली बार है जब एक एसओ जवाब ने मुझे बेकाबू होकर मुस्कुरा दिया है। सोचा कि यह इतना कठिन होगा!
ओवेन

25
उपयोग किए गए शिक्षाशास्त्र के लिए अतिरिक्त यश: सामान्य सुविधा दिखाएं, फिर कॉम्पैक्ट लेकिन कम सामान्य शॉर्टहैंड का उल्लेख करें! … मैं अक्सर उपयोग करता हूं @{u}, जो वर्तमान शाखा की अपस्ट्रीम शाखा है। यह उदाहरण के लिए बहुत उपयोगी है git log @{u}..जो ऊपर की ओर सूचीबद्ध करता है जो अभी तक नहीं खींचा गया है। और जो कांसेप्ट git log ..@{u}सिर्फ स्थानीय कमिट है जिसे अभी तक धकेला नहीं गया है।
बेंजोना

208

आजकल ऐसा करने का सबसे सरल तरीका है:

git checkout -

... जिसका एक उपनाम है:

git checkout @{-1}

गिट चेकआउट माइनस

यदि आप इसके बारे में अधिक जानना चाहते हैं, तो मैंने इसके बारे में एक पूरा लेख यहां लिखा है: चेकआउट द पिछली ब्रांच इन गिट


3
उत्तम। मैं देख रहा था कि ऐसा करने का तरीका क्या था इसलिए मैं इस सटीक उपनाम का निर्माण कर सकता था। यह देखने के लिए खुशी है कि यह अभी मौजूद है।
तबीथा

3
क्या पिछली शाखाओं की जांच किए बिना उन्हें सूचीबद्ध करने का एक तरीका है?
एरोटेमिक

7
@ इरोटिक बैश का उपयोग -for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
बोन्साईगिन

'Git checkout -' उपनाम देखने में आश्चर्यजनक है! यह ठीक वैसा ही है जैसा मैं देख रहा था :)
जेम्स टायलर

@ शब्दाडंबर में यह होगा git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] } । बैश में आपको कुछ समतुल्य लिखना होता है (इसे रिफॉल करें और इसे ": चेकआउट:" स्ट्रिंग और फिर ब्रांच नाम निकालें) वाली लाइनों पर फ़िल्टर करें। यह वास्तव में git
Mariusz Pawelski

28

जैसा कि @ कर्ल बताते हैं और git checkoutमैनुअल से:

एक विशेष मामले के रूप में, N-th अंतिम शाखा के लिए "@ {- N}" सिंटैक्स शाखा की जाँच करता है (डिटैच करने के बजाय)। आप यह भी निर्दिष्ट कर सकते हैं - जो "@ {- 1}" का पर्याय है।

दोनों तो git checkout -और git checkout @{-1}इस मामले में काम करेगा

मेरा मानना ​​है git reflogकि नवीनतम moving from branch1 to branch2और पार्स का उपयोग कर रहा हैgit checkout branch1


11

बस पिछले जवाबों के लिए कुछ और विवरण जोड़कर तंत्र को समझने के लिए जिसके द्वारा git checkout @{-N}काम करता है। यह चेकआउट इतिहास का निरीक्षण करने के लिए फिर से चलता है, इसलिए यदि आप अपने दम पर कुछ इसी तरह लागू करना चाहते थे तो आपको लाइनों की git reflogतलाश के आउटपुट को पार्स करने में सक्षम होना चाहिए checkout:। आप गिट स्रोत में कार्यान्वयन की जांच कर सकते हैं sha1_name.c, विशेष रूप से फ़ंक्शन interpret_nth_prior_checkout



10

Git संस्करण 2.23ने वह git switchकमांड पेश किया जिसका उपयोग आप (और अधिक) करने के लिए कर सकते हैं। आधिकारिक दस्तावेज का हवाला देते हुए:

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

अपने विशिष्ट मामले में आप git switch -उस शाखा में वापस जाने के लिए जारी कर सकते हैं जिस पर आप पहले थे। पहली शाखा में लौटने के लिए आप फिर से उसी कमांड को निष्पादित कर सकते हैं।

PS यह नहीं है कि आप पहले से ही नहीं जानते कि यह कैसे करना है (मेरा मतलब है कि यह प्रश्न पूछे जाने के बाद से आपको 7 साल हो गए हैं), लेकिन यह कमांड कम भ्रमित करने वाला और शुरुआती लोगों के लिए अनुकूल है क्योंकि यह एक आम पता है भ्रम को है जो उपयोग करते समय उत्पन्न होता है git checkout


5

मैं अपनी पिछली शाखा की जाँच करने के लिए इसी विचार के साथ इस प्रश्न पर उतरा। मैं उपयोग कर रहा हूँ ohmyz में Mac। नीचे कमांड ने मेरी मदद की।

$ gco -
$ git checkout -

बस एक सिर-अप कि ओमीज़ अन्य ज़ीएस पैकेज प्रबंधकों की तुलना में सुपर धीमा है। मैं एंटीजन या zplug पर एक नज़र लेने की सलाह दूंगा
Spex

2
यदि यह स्पष्ट नहीं है, तो यह काम करता है क्योंकि ओह माई ज़ीश के जीआईटी प्लगइनgco लेखन के एक छोटे तरीके के रूप में परिभाषित करता है git checkout। तो gco -बस फोन करता है git checkout -
रोरी ओ'केन

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

1

सबसे लोकप्रिय समाधान है:

git checkout @{-N}

जहां एन - चेकआउट इतिहास पर वापस जाने के लिए शाखाओं की गिनती।


1

यहाँ Git के दस्तावेज़ीकरण के कुछ हिस्सों के संकेत दिए गए हैं जो अन्य उत्तरों द्वारा दिए गए git checkout -और git checkout @{-1}समाधानों का वर्णन करते हैं:

  • जब किसी आदेश के लिए Git संशोधन निर्दिष्ट किया जाता है @{-<n>}, उदाहरण के लिए@{-1} " n वें शाखा / वचनबद्धता वर्तमान से पहले जाँच की जाती है।" git checkout <branch>दोहराए जाने के लिए दस्तावेज़ीकरण : "आप @{-N}एन-वें अंतिम शाखा / git checkoutऑपरेशन का उपयोग करके जाँच किए जाने के लिए वाक्यविन्यास का उपयोग कर सकते हैं ।"

  • के <branch>तर्क के लिएgit checkout , "आप यह भी निर्दिष्ट कर सकते हैं ' -' जो ' ' का पर्याय है @{-1}।"

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