यह इस बात पर निर्भर करता है कि जब आप जांच करते हैं कि आप क्या करना चाहते हैं। यदि आप सब कर रहे हैं, तो यह देख रहे हैं कि आप उस संशोधन का निर्माण या परीक्षण कर सकते हैं, तो अलग किए गए सिर के साथ काम करने में कुछ भी गलत नहीं है। किसी भी कमिट ( git checkout master
उदाहरण के लिए) बनाने से पहले बस एक वास्तविक ब्रांच की जांच करना याद रखें , ताकि आप उन कमिट्स का निर्माण न करें जो किसी भी ब्रांच में शामिल नहीं हैं।
यदि, हालांकि, आप उस बिंदु से शुरू करने के लिए अधिक कमिट करना चाहते हैं, तो आपको एक शाखा बनाना चाहिए। यदि आप कमिट करते हैं जो एक शाखा द्वारा संदर्भित नहीं हैं, तो वे आसानी से खो सकते हैं, और अंततः गिट के कचरा संग्रहकर्ता द्वारा साफ किया जाएगा, क्योंकि कुछ भी उन्हें संदर्भित नहीं करता है। आप चलाकर एक नई शाखा बना सकते हैं:
git checkout -b newbranch ea3d5ed
कल्पना करने में मदद करने के लिए, यहाँ कुछ आरेख हैं जो यह दर्शाते हैं कि अलग किए गए सिर पर काम करना किस तरह एक शाखा पर काम करने से अलग होता है।
चलो शुरू करते हैं 3 पर शुरू होता है master
, ए, बी, और सी master
वर्तमान शाखा है, इसलिए HEAD
इंगित करता है master
, जो सी को इंगित करता है।
एबीसी
* - * - * <- गुरु <- हेड
अब अगर हम प्रतिबद्ध होते हैं, तो git एक ऐसा कमेंट बनाएगा, जिसमें C एक अभिभावक के रूप में होगा (क्योंकि वह वर्तमान कमिट है, जिसके HEAD
माध्यम से इंगित किया गया है master
), और master
उस नई कमिट को इंगित करने के लिए अपडेट करेगा । हमारे सभी कमिट अब अंदर हैं master
, और HEAD
नए कमिट के माध्यम से बताते हैं master
।
ऐ बी सी डी
* - * - * - * <- गुरु <- हेड
अब हम बी को चेक करते हैं, हमें एक अलग करते हैं HEAD
।
ऐ बी सी डी
* - * - * - * <- गुरु
^
\-- सिर
यहाँ सब कुछ ठीक काम करता है; हम सभी फाइलों को देख सकते हैं, अपने कार्यक्रम का निर्माण कर सकते हैं, इसका परीक्षण कर सकते हैं, आदि। हम नए कमिट भी बना सकते हैं; लेकिन अगर हम ऐसा करते हैं, तो कोई भी शाखा नहीं है जिस पर हम चल रहे हैं, इसलिए हम उस नई प्रतिबद्ध पर किसी भी शाखा को इंगित नहीं कर सकते हैं। केवल इस ओर इशारा करते हैं HEAD
:
ऐ बी सी डी
* - * - * - * <- गुरु
\
* <- हेड
इ
अगर हम बाद में master
फिर से जांच करने का फैसला करते हैं, तो ई के लिए कुछ भी नहीं होगा।
ऐ बी सी डी
* - * - * - * <- गुरु <- हेड
\
*
इ
चूंकि इसका जिक्र कुछ भी नहीं है, इसलिए इसे खोजना मुश्किल हो सकता है, और गिट कोई संदर्भ नहीं छोड़ता के साथ कमिट करता है (वे आमतौर पर ऐसा होता है अगर आप रिबेट करते हैं, या स्क्वैश पैच इन करते हैं, या अन्य मज़ेदार इतिहास हेरफेर करते हैं; वे आमतौर पर छोड़ दिए गए पैच हैं। कि तुम अब के बारे में परवाह नहीं है)। एक निश्चित समय के बाद, git इसे कचरा मान लेगा, अगली बार कचरा संग्रह चलने पर इसे छोड़ दिया जाएगा।
इसलिए, एक नंगे संशोधन की जांच करने और एक अलग सिर पाने के बजाय, अगर आपको लगता है कि आप अधिक कमिट करने जा रहे हैं, तो आपको git checkout -b branch B
एक शाखा बनाने और इसे जांचने के लिए उपयोग करना चाहिए । अब आपके कमिट्स खो नहीं जाएंगे, क्योंकि उन्हें एक शाखा में शामिल किया जाएगा, जिसे आप आसानी से संदर्भित कर सकते हैं और बाद में विलय कर सकते हैं।
ऐ बी सी डी
* - * - * - * <- गुरु
^
\ - शाखा <- हेड
यदि आप ऐसा करना भूल जाते हैं, और एक शाखा बंद कर देते हैं, तो चिंता करने की कोई आवश्यकता नहीं है। आप हेड रिवीजन के साथ एक शाखा बना सकते हैं git checkout -b branch
। यदि आप पहले से ही master
शाखा में वापस आ गए हैं , और महसूस करते हैं कि आप एक भटका प्रतिबद्ध भूल गए हैं, तो आप इसका उपयोग करके पा सकते हैं git reflog
, जो आपको दिखाएगा HEAD
कि पिछले कुछ दिनों में क्या कमिट का संकेत दिया गया है। कुछ भी जो अभी भी रिफ्लॉग में है, कचरा एकत्र नहीं किया जाएगा, और आम तौर पर संदर्भ को कम से कम 30 दिनों के लिए रिफ्लॉग में रखा जाता है।