पिछली कमेटी की जाँच करने के बाद नवीनतम कमेटी में वापस कैसे जाएँ?


476

मैं कभी-कभी कोड के कुछ पिछले संस्करण की जांच या परीक्षण करने के लिए जाँच करता हूं। मैंने निर्देश देखे हैं कि यदि मैं पिछले कमिट्स को संशोधित करना चाहता हूं तो क्या करना है - लेकिन मान लीजिए कि मैं कोई बदलाव नहीं करता हूं। जैसे मैंने काम किया है git checkout HEAD^, मैं शाखा की नोक पर वापस कैसे जाऊं? .. git logअब मुझे नवीनतम प्रतिबद्ध का SHA नहीं दिखाता है।


11
git logअपने प्रश्न के वाक्य के बारे में , आप हमेशा git log --all(या अधिक उपयोगी तरीके से git log --oneline --graph --all) चला सकते हैं ।
वाइल्डकार्ड

जवाबों:


605

यदि आप जानते हैं कि आप जिस प्रतिज्ञा पर वापस जाना चाहते हैं, वह किसी शाखा का प्रमुख है, या टैग किया गया है, तो आप बस कर सकते हैं

git checkout branchname

आप यह git reflogदेखने के लिए भी उपयोग कर सकते हैं कि आपके HEAD (या किसी अन्य रेफरी) ने अतीत में क्या इंगित किया है।


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

गिट के नए संस्करणों में, यदि आप केवल एक बार चलने के लिए git checkoutया कुछ और चलाते हैं, तो आप HEADभी कर सकते हैं

git checkout -

अंतिम चेकआउट से पहले जहां भी यह था, वहां वापस जाने के लिए। यह cd -जो कुछ पहले काम कर रहे निर्देशिका में वापस जाने के लिए शैल मुहावरे के सादृश्य से प्रेरित था।


27
मैं उल्लेख करना चाहूंगा कि विशिष्ट उदाहरण "गिट चेकआउट मास्टर" होगा। मैं जिन git का उपयोग करना सीख रहा था उनमें से एक यह नहीं जान रहा था कि मैं किस विशिष्ट कीवर्ड (उदाहरण के लिए "मास्टर") को वास्तव में "ब्रांचनाम" ​​जैसे प्लेसहोल्डर शब्दों में स्थानापन्न कर सकता हूं।
AbePralle

3
masterवास्तव में किसी भी तरह का कीवर्ड नहीं है, तरीका HEADहै। यह एक नए भंडार में बस डिफ़ॉल्ट शाखा का नाम है। आप git branchअपनी रिपॉजिटरी में शाखाओं की सूची पाने के git tag -lलिए और टैग की सूची के लिए दौड़ सकते हैं । इसी तरह, originरिमोट का डिफ़ॉल्ट नाम है जिसे रिपॉजिटरी से क्लोन किया जाता है, लेकिन इसके बारे में कुछ खास नहीं है।
फिल मिलर

3
यदि यह स्पष्ट नहीं था, git reflogतो आपको हैश की सूची मिलती है, जिस बिंदु पर आप उपयोग कर सकते हैं git checkout [commit-hash]
jbnunn

मैंने एक फ़ाइल को हटा दिया और कमांड की कोशिश की, लेकिन यह पूरी तरह से इसे रीसेट नहीं करता है। सबसे पहले, यह पुनरावर्ती नहीं है। फिर जब मैंने इसे डिलीट की गई फाइल पर ट्राई किया, तो git ने मुझे बताया कि HEAD अलग है। क्या करें?
डैनियल एस।

1
@ डैनियलएस: सवाल और मेरा जवाब कमिट्स के बारे में था , जबकि आप फाइलों के बारे में बात कर रहे हैं। गिट उन्हें अलग तरह से व्यवहार करता है।
फिल मिलर

27

गिट चेकआउट मास्टर

मास्टर टिप है, या अंतिम प्रतिबद्ध है। gitk आपको केवल यह दिखाएगा कि आप उस समय पेड़ में कहां हैं। git reflog सभी कमिट दिखाएगा, लेकिन इस मामले में, आपको सिर्फ टिप चाहिए, इसलिए git चेकआउट मास्टर।


1
इस। याgit checkout branchname
एलेक्स

19

अभी इस सवाल पर आया और कुछ जोड़ना है

सबसे हाल ही में जाने के लिए:

git checkout $(git log --branches -1 --pretty=format:"%H")

स्पष्टीकरण:

git log --branchesसभी स्थानीय शाखाओं से कमिट्स के लॉग
-1को एक कमिट में
--pretty=format:"%H"दिखाया गया है → हाल ही में किए गए कमिट फॉर्मेट में
git checkout $(...)चेकआउट के तर्क के रूप में सबश के आउटपुट का उपयोग करना है।

ध्यान दें:

यह एक अलग सिर में परिणाम होगा (क्योंकि हम सीधे प्रतिबद्ध करने के लिए चेकआउट)। sedनीचे बताए गए शाखा नाम का उपयोग करके इसे टाला जा सकता है ।


सबसे हालिया प्रतिबद्ध की शाखा में जाने के लिए:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')

स्पष्टीकरण:

git log --branchesसभी स्थानीय शाखाओं की
-1सीमाओं से एक कमिट तक लॉग का पता चलता है → सबसे हाल ही में प्रतिबद्ध
--pretty=format:"%D"प्रारूप केवल रेफरी नामों
| sed 's/.*, //g'को दिखाने के लिए सभी को अनदेखा करता है, लेकिन कई रीफ़्स (*) के अंतिम
git checkout $(...)सबऑउट के आउटपुट का उपयोग चेकआउट के लिए तर्क के रूप में करते हैं

*) HEAD और दूरस्थ शाखाओं को पहले सूचीबद्ध किया गया है, स्थानीय शाखाओं को वर्णानुक्रम में अवरोही क्रम में अंतिम रूप से सूचीबद्ध किया गया है, इसलिए शेष बची हुई वर्णमाला पहली शाखा का नाम होगी

ध्यान दें:

यह हमेशा केवल (वर्णानुक्रम में) पहली शाखा के नाम का उपयोग करेगा यदि उस प्रतिबद्ध के लिए कई हैं।


वैसे भी, मुझे लगता है कि सबसे अच्छा समाधान सिर्फ सबसे हाल की प्रतिबद्ध के लिए रेफरी नामों को प्रदर्शित करना होगा, जहां यह जांचना है:

git log --branches -1 --pretty=format:'%D'

जैसे git topउस कमांड के लिए उपनाम बनाएँ ।


1
किसी तरह मैं दूसरी कमांड को देख रहा हूं ... यह तय हो गया है, अब यह सही ढंग से आपको सबसे हाल की प्रतिबद्ध ओटी की शाखा की जांच करेगा।
816-8055

वापस सिर पर लौटने के लिए बैश / zsh उर्फalias git-head='git checkout $(git log --branches -1 --pretty=format:"%D" | sed "s/.*, //g")'
हाय-एंजेल

9

ग्राफिकल जीयूआई पर एक नजर है ... gitkयह सभी आवागमन दिखाता है। कभी-कभी चित्रमय काम करना आसान होता है ... ^ ^


हां, यह वास्तव में है कि मैंने इसे अतीत में कैसे किया है - लेकिन मेरे पास इस समय जीयूआई उपलब्ध नहीं है
लियो अलेक्सेयेव

7

आप इसके लिए निम्नलिखित git कमांड में से एक का उपयोग कर सकते हैं:

git checkout master
git checkout branchname

4

सभी शाखाओं को दिखाने और कमिट
लॉग लॉग --branches --online

अंतिम कमिट
git लॉग --branches -1 --online दिखाएँ

अंतिम प्रतिबद्ध git लॉग --branches -2 --online से पहले
दिखाएँ


क्या पहले कमांड वास्तव में प्रतिबद्ध होगा कि वर्तमान में किस कोड का मंचन किया जा रहा है, या क्या मैं इसका गलत इस्तेमाल कर रहा हूं?
लेज़रबेक12345


0

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


0

आप बस कर सकते हैं git pull origin branchname। यह नवीनतम कमिटमेंट लाएगा।


यदि आप ऊपर की ओर से खींचना नहीं चाहते हैं तो मैं इसकी अनुशंसा नहीं करता। जब वे तैयार हों तभी किसी को मर्ज संघर्षों को संभालना चाहिए।
लेज़रबेक12345

ठीक है, उस स्थिति में, यदि आप नवीनतम कमेटी को चेकआउट करते हैं तो भी सिर अलग रहेगा।
अंकित सिंह

-2

यदि आपकी नवीनतम प्रतिबद्धता मास्टर शाखा पर है, तो आप बस उपयोग कर सकते हैं

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