git - एक टैग को आगे बढ़ाएं




github version (2)

आप टैग को हटा भी सकते हैं और फिर इसे पुनः बना सकते हैं, इसके लिए इतिहास को फिर से लिखने की आवश्यकता नहीं है।
(कोई push --force नहीं - push --force )

स्थानीय और दूरस्थ हटाएँ

git tag -d <tag_name>
git push origin :refs/tags/<tag_name>

बहलाना

git tag <tag_name>
git push --tags

मेरे पास केवल एक शाखा ( master ) के साथ एक भंडार है। मैं अपने रेपो का एकमात्र योगदानकर्ता हूं।

मैंने हाल ही में एक tag जोड़ा है, दोनों स्थानीय रूप से और GitHub को धकेल दिया। बनाने के बाद, हालांकि मैं अंतिम आवश्यक प्रतिबद्ध था, लेकिन अब मुझे एहसास हुआ कि मुझे एक और बदलाव / प्रतिबद्ध करना चाहिए था।

तो मेरे पास क्या है:

commit 124
commit 125
commit 126 <-- tag v1.0
commit 127

और मैं v1.0 टैग को अगले कमिट में स्थानांतरित करना चाहता हूं, अर्थात: 127 , दोनों स्थानीय और गीथहब में।

मैं उसे कैसे कर सकता हूँ?


क्या आप कभी किसी बुक क्लब में गए हैं जहाँ सदस्य "सप्ताह की पुस्तक" के एक ही संस्करण का उपयोग नहीं करते हैं? यह एक बुरा सपना है, है ना? एक टैग को ले जाना अनिवार्य रूप से आपको उसी स्थिति में डाल देगा।

यदि आप अपनी रिपॉजिटरी को एक पुस्तक के रूप में सोचते हैं जो क्रोनिकल्स आपकी परियोजना में प्रगति करते हैं, तो आप एक टैग को अध्याय शीर्षक के रूप में सोच सकते हैं।

किसी टैग को साझा करने के बाद उसे किसी भिन्न कमिट में ले जाना आपके सभी बुक-क्लब मित्रों को बताने जैसा है

तुम्हें पता है क्या, दोस्तों? अब तक हम जिस पुस्तक का उपयोग कर रहे हैं, उसका संस्करण अब अप्रचलित है, क्योंकि मैंने पूरी तरह से यह तय कर लिया है कि अध्याय 8 अब पृष्ठ 126 पर नहीं, बल्कि पृष्ठ 128 पर शुरू होगा।

अच्छा नही। टैग को स्थानांतरित करना इतिहास पुनर्लेखन का एक रूप है, और आपको साझा किए गए इतिहास को फिर से लिखना नहीं चाहिए। यह आपके सहयोगियों को पेशाब करने का सबसे सुरक्षित तरीका है। इसके अलावा, आप लिखते हैं

मैं अपने रेपो में एकमात्र योगदानकर्ता हूं [...]

यह अब के लिए सच हो सकता है, लेकिन अगर आपके अलावा अन्य लोगों के पास आपके GitHub रिपॉजिटरी (जैसे अगर यह सार्वजनिक है) तक पहुंच है, तो उनमें से कुछ पहले से ही इसे फोर्क या क्लोन कर सकते हैं (हालांकि पता लगाने का एक way है), और आप चलाते हैं यदि आप इतिहास को फिर से लिखते हैं तो उन्हें बंद करने का जोखिम है।

यदि आप 100% सुनिश्चित हैं कि आप उस टैग को वैसे भी स्थानांतरित करना चाहते हैं, तो Git आपको इसे करने की अनुमति देता है। यहां, आप उपयोग कर सकते हैं

git tag --force v1.0 <ID-of-commit-127>

और फिर आपको उस टैग का उपयोग करने के लिए मजबूर करना होगा

git push --force --tags

लेकिन फिर, आगे बढ़ने से पहले दो बार सोचें ...

परिशिष्ट (2018/09/26)

मुझे अपने उत्तर पर फिर से विचार करने की आवश्यकता है ...

वर्षों से, कुछ लोगों ने टिप्पणियों में मेरे निषेधाज्ञा पर आपत्ति जताई है ताकि पहले से प्रकाशित टैग को स्थानांतरित न किया जा सके। बेशक, सलाह का यह टुकड़ा सार्वभौमिक के बजाय प्रासंगिक है; मुझे संदेह नहीं है कि प्रकाशित टैग को स्थानांतरित करने के लिए अच्छे मामले मौजूद हैं। हालांकि, मैं इस विश्वास में दृढ़ हूं कि, एक सामान्य नियम के रूप में, प्रकाशित टैग को स्थानांतरित करने का निर्णय जानबूझकर और अत्यधिक देखभाल के साथ किया जाना चाहिए।

एक ताजा उदाहरण दिमाग में आता है। 1.11 ने एक मॉड्यूल सिस्टम के लिए प्रयोगात्मक समर्थन जोड़ा जो कि संस्करण के लिए Git टैग पर बहुत निर्भर करता है। गो मॉड्यूल में एक टैग को स्थानांतरित करना जो प्रकाशित किया गया है (गिटहब पर, कहते हैं) के विनाशकारी परिणाम होंगे।

ऐसा करने से, आप आपके (मॉड्यूल लेखक) और आपके उपयोगकर्ताओं (आपके मॉड्यूल पर निर्भर रहने वाले) के बीच स्थापित अनुबंध को तोड़ देंगे, क्योंकि आप उन गारंटियों को नकार देंगे जो कि गो का मॉड्यूल सिस्टम प्रदान करने का इरादा रखता है:

मॉड्यूल सटीक निर्भरता आवश्यकताओं को रिकॉर्ड करते हैं और प्रतिलिपि प्रस्तुत करने योग्य बिल्ड बनाते हैं।

यह लोगों को पेशाब करने का एक निश्चित तरीका है।

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





commit