आज एक समस्या के साथ एक दोस्त की मदद करते हुए, मुझे एक शाखा शुरू करनी थी जो शाखा से पूरी तरह से अलग होने की आवश्यकता थी master
। इस शाखा की सामग्री का वास्तव में एक अलग मूल था master
, जिसे शाखा में विकसित किया गया था , लेकिन master
बाद में उन्हें शाखा में विलय कर दिया गया था।
मुझे याद आया कि जॉन विएग्ली की गिट्टी को नीचे से पढ़ने से याद आता है कि कैसे शाखाएं अनिवार्य रूप से एक प्रतिबद्ध के लिए एक लेबल है जो एक निश्चित सम्मेलन का अनुसरण करता है और कैसे एक प्रतिबद्ध फाइल फाइलों के पेड़ से बंधा होता है और वैकल्पिक रूप से माता-पिता के लिए होता है। हम गिट्स प्लंबिंग का उपयोग करके मौजूदा रिपॉजिटरी के लिए एक पेरेंटलेस कमिट बनाने के लिए गए:
इसलिए हमने इंडेक्स की सभी फाइलों से छुटकारा पा लिया ...
$ git rm -rf .
... टारबॉल से निकाले गए निर्देशिका और फाइलें, उन लोगों को सूचकांक में जोड़ा ...
$ git add .
... और एक ट्री ऑब्जेक्ट बनाया ...
$ git write-tree
( git-write-tree
हमें बनाई गई ट्री ऑब्जेक्ट का sha1sum बताया।)
फिर, हमने पेड़ को प्रतिबद्ध किया, बिना माता-पिता के काम को निर्दिष्ट किए ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
हमें बनाई गई प्रतिबद्ध वस्तु का sha1sum बताया।)
... और एक नई शाखा बनाई जो हमारे नए बनाए गए कमिट की ओर इशारा करती है।
$ git update-ref refs/heads/other-branch $COMMIT
अंत में, हम master
वहां काम जारी रखने के लिए शाखा में लौट आए ।
$ git checkout -f master
ऐसा लगता है कि योजना के अनुसार काम किया है। लेकिन यह स्पष्ट रूप से उस तरह की प्रक्रिया नहीं है, जिसे मैं किसी ऐसे व्यक्ति के लिए सुझाऊंगा, जो अभी-अभी गिट का उपयोग करना शुरू कर रहा है, इसे हल्के ढंग से डालने के लिए। क्या एक नई शाखा बनाने का एक आसान तरीका है जो अब तक भंडार में हुई हर चीज से पूरी तरह से संबंधित नहीं है?