git - मैं एक गिट शाखा पर एक टैग को एक अलग प्रतिबद्धता में कैसे स्थानांतरित कर सकता हूं?




git-tag (5)

मैंने मास्टर शाखा पर एक टैग बनाया जिसे v0.1 कहा जाता है:

git tag -a v0.1

लेकिन तब मुझे एहसास हुआ कि रिलीज 0.1 के लिए मास्टर में विलय करने के लिए मुझे अभी भी कुछ बदलाव हुए हैं, इसलिए मैंने ऐसा किया। लेकिन अब मेरा v0.1 टैग गलत प्रतिबद्धता के बाद (पोस्ट-नोट नोट समानता को आह्वान करने के लिए) पर फंस गया है। मैं चाहता हूं कि यह मास्टर पर सबसे हालिया प्रतिबद्धता पर फंस जाए, लेकिन इसके बजाय यह मास्टर पर दूसरी सबसे हालिया प्रतिबद्धता पर फंस गया है।

मैं इसे मास्टर पर सबसे हालिया प्रतिबद्धता में कैसे ले जा सकता हूं?


अगर आपके रिमोट को origin कहा जाता है तो आप योग करने के लिए और आप master शाखा पर काम कर रहे हैं:

git tag -d <tagname>
git push origin :refs/tags/<tagname>
git tag <tagname> <commitId>
git push origin <tagname>
  • लाइन 1 स्थानीय env में टैग हटा देता है।
  • लाइन 2 रिमोट एनवी में टैग हटा देता है।
  • लाइन 3 टैग को विभिन्न प्रतिबद्धताओं में जोड़ता है
  • लाइन 4 रिमोट में परिवर्तन को धक्का देता है

आप अपने स्थानीय परिवर्तनों से टैग के साथ सभी परिवर्तनों को धक्का git push origin --tags लिए git push origin --tags को लाइन 4 का आदान-प्रदान भी कर सकते हैं।

@ स्टुअर्ट-गोल्डेट्ज़, @ ग्रेग-हेवगिल, @eedeep, @ बेन-हॉकिंग उत्तर, उनके उत्तरों के नीचे टिप्पणियां और मेरे उत्तर के नीचे नेट्स टिप्पणियों पर आधारित।


अधिक सटीक, आपको टैग को जोड़ने के लिए मजबूर करना होगा, फिर विकल्प - tags और -f के साथ धक्का देना होगा:

git tag -f -a <tagname>
git push -f --tags

उपनाम एक टैग को एक अलग प्रतिबद्धता में ले जाने के लिए।

अपने नमूने में, हैश e2ea1639 के साथ प्रतिबद्धता को स्थानांतरित करने के लिए: git tagm v0.1 e2ea1639

धक्का टैग के लिए, git tagmp v0.1 e2ea1639 उपयोग करें।

दोनों उपनाम आपको मूल तिथि और संदेश रखता है। यदि आप git tag -d उपयोग करते हैं तो आपने अपना मूल संदेश खो दिया है।

उन्हें अपनी .gitconfig फ़ाइल पर सहेजें

# Return date of tag. (To use in another alias)
tag-date = "!git show $1 | awk '{ if ($1 == \"Date:\") { print substr($0, index($0,$3)) }}' | tail -2 | head -1 #"

# Show tag message
tag-message = "!git show $1 | awk -v capture=0 '{ if(capture) message=message\"\\n\"$0}; BEGIN {message=\"\"}; { if ($1 == \"Date:\" && length(message)==0 ) {capture=1}; if ($1 == \"commit\" ) {capture=0}  }; END { print message }' | sed '$ d' | cat -s #"

### Move tag. Use: git tagm <tagname> <newcommit> 
tagm = "!GIT_TAG_MESSAGE=$(git tag-message $1) && GIT_COMMITTER_DATE=$(git tag-date $1) && git tag-message $1 && git tag -d $1 && git tag -a $1 $2 -m \"$GIT_TAG_MESSAGE\" #"

### Move pushed tag. Use: git tagmp <tagname> <newcommit> 
tagmp = "!git tagm $1 $2 && git push --delete origin $1 && git push origin $1 #"

एक और तरीका:

रिमोट रेपो में टैग ले जाएं। (यदि आवश्यक हो तो हेड को किसी अन्य के साथ बदलें।)

$ git push --force origin HEAD:refs/tags/v0.0.1.2

वापस परिवर्तन लाओ।

$ git fetch --tags

git tag करने के लिए -f विकल्प का उपयोग करें:

-f
--force

    Replace an existing tag with the given name (instead of failing)

आप शायद गैर-एनोटेटेड के बजाय एक एनोटेटेड टैग बनाने के लिए -a के साथ -a साथ संयोजन के रूप में उपयोग करना चाहते हैं।

उदाहरण

  1. धक्का देने से पहले किसी भी रिमोट पर टैग हटाएं

    git push origin :refs/tags/<tagname>
    
  2. सबसे हालिया प्रतिबद्धता को संदर्भित करने के लिए टैग को बदलें

    git tag -fa <tagname>
    
  3. टैग को रिमोट उत्पत्ति पर पुश करें

    git push origin master --tags
    




git-tag