Git ශාඛාවක ටැගයක් වෙනත් බැඳීමකට ගෙන යන්නේ කෙසේද?


904

මාස්ටර් ශාඛාවේ මම මේ වගේ ටැගයක් නිර්මාණය කළා v0.1:

git tag -a v0.1

නමුත් 0.1 නිකුතුව සඳහා මාස්ටර් සමඟ ඒකාබද්ධ වීමට තවමත් යම් යම් වෙනස්කම් ඇති බව මට වැටහුණි, එබැවින් මම එය කළෙමි. නමුත් දැන් මගේ v0.1ටැගය සිරවී ඇත (පශ්චාත්-සටහන් සටහන් ප්‍රතිසමයට) වැරදි කැපවීම. මාස්ටර්ගේ නවතම කැපවීම මත එය හිර වී සිටීමට මට අවශ්‍යය, නමුත් ඒ වෙනුවට එය මාස්ටර්ගේ දෙවන නවතම කැපවීම මත සිරවී ඇත.

මාස්ටර් පිළිබඳ නවතම කැපවීම වෙත එය ගෙන යන්නේ කෙසේද?

Answers:


1251

-fවිකල්පය භාවිතා කරන්න git tag:

-f
--force

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

ඔබ බොහෝ විට භාවිතා කිරීමට අවශ්ය -fසමග සහයෝගීව -aකිරීමට නොවන ග්රන්ථ එක් වෙනුවට විවරණ සහිත ටැගය බලය නිර්මාණය කරන්න.

උදාහරණයක්

  1. ඔබ තල්ලු කිරීමට පෙර ඕනෑම දුරස්ථයක ඇති ටැගය මකන්න

    git push origin :refs/tags/<tagname>
    
  2. නවතම කැපවීම සඳහන් කිරීමට ටැගය ප්‍රතිස්ථාපනය කරන්න

    git tag -fa <tagname>
    
  3. ටැගය දුරස්ථ සම්භවයට තල්ලු කරන්න

    git push origin master --tags
    

13
මෙය ක්‍රියාත්මක වන්නේ ඔබ ඔබේ යන්ත්‍රයෙන් කේතය තල්ලු කර නොමැති නම් පමණි. ඔබ සතුව ඇත්නම්, හොඳම පිළිතුර වන්නේ 'ලෝකයේ ඕනෑ තරම් සංඛ්‍යා තිබේ' යන්නයි.
ක්‍රිස් හුවාං-ලීවර්

37
ඔබ දැනටමත් ඔබේ ටැගය තල්ලු කර ඇත්නම් බලහත්කාරයෙන් තල්ලු කිරීමෙන් දුරස්ථ ටැගය යාවත්කාලීන කළ හැකියgit push -f origin <tagname>
rc_luke

2
ටැග් යොමුව නව ස්ථානයට වේගයෙන් යොමු කළ හැකි නම්, ඔබ බලහත්කාරයෙන් තල්ලු කිරීම භාවිතා කළ යුතු නොවේ.
GergelyPolonkai

11
මෙහි සහ ලියකියවිලි වල සඳහන් නොවන දෙය නම්, මෙය නව පණිවිඩයක් ලබා නොදුනහොත් ටැග් පණිවිඩය සැබවින්ම චලනය වන බවයි.
Twonky

5
# 3 git push origin master --tagsහි ටැග් තල්ලු කිරීමට යන බව සලකන්න , සහ masterශාඛාව ඔබ දේශීය වශයෙන් යම් වෙනසක් කර ඇත්නම් . git push origin --tagsඔබට කිරීමට අවශ්‍ය වන්නේ තල්ලු ටැග් නම් පමණක් භාවිතා කරන්න.
c32hedge

267

වඩාත් නිවැරදිව, ඔබට ටැගය එකතු කිරීමට බල කළ යුතු අතර, පසුව --tags සහ -f විකල්පය සමඟ තල්ලු කරන්න.

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

188

ඔබේ දුරස්ථය කැඳවා originඔබ masterශාඛාවේ වැඩ කරන්නේ නම් සාරාංශ කිරීමට :

git tag -d <tagname>
git push origin :refs/tags/<tagname>
git tag <tagname> <commitId>
git push origin <tagname>
  • 1 වන පේළිය දේශීය env හි ටැගය ඉවත් කරයි.
  • 2 වන පේළිය දුරස්ථ env හි ටැගය ඉවත් කරයි.
  • 3 වන පේළිය විවිධ කැපවීම් සඳහා ටැගය එක් කරයි
  • 4 වන පේළිය දුරස්ථයට වෙනස තල්ලු කරයි

git push origin --tagsඔබගේ දේශීය වෙනස්කම් වලින් ටැග් සමඟ සියලු වෙනස්කම් තල්ලු කිරීම සඳහා ඔබට 4 වන පේළිය හුවමාරු කර ගත හැකිය .

@ ස්ටුවර්ට්-ගොලොඩෙට්ස්, @ ග්‍රෙග්-හෙව්ගිල්, ඊඩීප්, @ බෙන්-හොකිං පිළිතුරු, ඔවුන්ගේ පිළිතුරු වලට පහළින් අදහස් සහ මගේ පිළිතුරට පහළින් නේට්ස් අදහස්.


87

එය මකා දමා git tag -d <tagname>නිවැරදි කැපවීම මත එය නැවත ප්‍රතිනිර්මාණය කරන්න.


3
ඊඩීප්: මම හිතන්නේ ග්‍රෙග්ගේ ප්‍රතිචාරය ඇත්ත වශයෙන්ම මෙහි වඩා හොඳය.
ස්ටුවර්ට් ගොලොඩෙට්ස්

එය සරලව තබා ගන්න. එය මකන්න, ඔබ කලින් කළ දේ නැවත කරන්න.
ooolala

1
මෙය සරල බව සඳහා පිළිගත් පිළිතුර විය යුතුය. -F බලය අධික ලෙස භාවිතා නොකරයි.
chinnychinchin

57

Git භාවිතා කරන විට මම කරුණු කිහිපයක් මග හැරීමට උත්සාහ කරමි.

  1. අභ්‍යන්තර දැනුම භාවිතා කිරීම, උදා. Refs / tags. මම තනිකරම ලේඛනගත Git විධානයන් භාවිතා කිරීමට උත්සාහ කරමි .git නාමාවලියෙහි අභ්‍යන්තර අන්තර්ගතයන් පිළිබඳ දැනුමක් අවශ්‍ය දේවල් භාවිතා කිරීමෙන් වැළකී සිටිමි. (එනම්, මම Git සලකන්නේ Git භාවිතා කරන්නෙකු ලෙස මිස Git සංවර්ධකයෙකු ලෙස නොවේ.)

  2. අවශ්‍ය නොවන විට බලය භාවිතා කිරීම.

  3. දේවල් ඉක්මවා යාම. (මට අවශ්‍ය තැන එක් ටැගයක් ලබා ගැනීම සඳහා ශාඛාවක් සහ / හෝ ටැග් ගොඩක් තල්ලු කිරීම.)

Git අභ්‍යන්තරය පිළිබඳ දැනුමක් නොමැතිව දේශීයව සහ දුරස්ථව ටැගයක් වෙනස් කිරීම සඳහා මගේ අවිහිංසාවාදී විසඳුම මෙන්න.

මෘදුකාංග විසඳුමක් අවසානයේ ගැටළුවක් ඇති වූ විට එය යාවත්කාලීන කිරීම / නැවත මුදා හැරීම අවශ්‍ය වූ විට මම එය භාවිතා කරමි.

git tag -d fix123                # delete the old local tag
git push github :fix123          # delete the old remote tag (use for each affected remote)
git tag fix123 790a621265        # create a new local tag
git push github fix123           # push new tag to remote    (use for each affected remote)

githubනියැදි දුරස්ථ නමකි, fix123නියැදි ටැග් නමකි, 790a621265නියැදි කැපවීමකි.


27

මගේ අවශ්‍යතාවන්ට ගැලපෙන මෙම විධානයේ තවත් ආකාරයක් මම මෙහි තබමි. මට චලනය කිරීමට අවශ්‍ය
ටැගයක් v0.0.1.2තිබුණි.

$ git tag -f v0.0.1.2 63eff6a

Updated tag 'v0.0.1.2' (was 8078562)

ඊළගට:

$ git push --tags --force

10

තවත් ක්‍රමයක්:

දුරස්ථ repo තුළ ටැගය ගෙනයන්න (අවශ්‍ය නම් HEAD වෙනත් ඕනෑම දෙයක් සමඟ ප්‍රතිස්ථාපනය කරන්න.)

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

වෙනස්කම් නැවත ලබා ගන්න.

$ git fetch --tags

මෙය අනෙක් පිළිතුරු වලට වඩා "ගනුදෙනු" වේ.
ජස්ටින් එම්. කීස්

9

එක් ටැගයක් වෙනත් කැපවීමකට ගෙනයාමට අන්වර්ථය.

ඔබේ නියැදියේදී, හෑෂ් 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 #"

1

ඔබට විවරණය කළ ටැගයක් ගෙනයාමට අවශ්‍ය නම්, ඉලක්කගත කැපවීම පමණක් වෙනස් කිරීම, නමුත් විවරණ පණිවිඩය සහ වෙනත් පාර-දත්ත භාවිතය ආරක්ෂා කිරීම:

moveTag() {
  local tagName=$1
  # Support passing branch/tag names (not just full commit hashes)
  local newTarget=$(git rev-parse $2^{commit})

  git cat-file -p refs/tags/$tagName | 
    sed "1 s/^object .*$/object $newTarget/g" | 
    git hash-object -w --stdin -t tag | 
    xargs -I {} git update-ref refs/tags/$tagName {}
}

භාවිතය: moveTag <tag-to-move> <target>

ඉහත ශ්‍රිතය සංවර්ධනය කරන ලද්දේ teerapap / git-move-annotated-tag.sh .


1
මෙය තවදුරටත් අවශ්‍ය නොවන බව පෙනේ: git tag -f -a my_tagපෙර පණිවිඩයක පණිවිඩය දැනටමත් සංරක්ෂණය කර ඇත (git අනුවාදය 2.11.0 සමඟ).
මැතිතිස් කූයිජ්මන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.