我们最近遇到了Git存储库中的标签问题。
我们在本地和远程删除了我们的标签,但每次我们推送或从远程获取时它们都会自动恢复。
我们目前正在一个三人小组工作,当我们认为我们实际上已经摆脱了标签时,有人会推动我们再次获得它们。
我们都试过了:
{{1}}
其他人遇到过这个问题吗?
答案 0 :(得分:7)
再次删除标签然后执行此操作:
# verify that the tag was removed form another computer
git fetch --all --prune
Important
强> 如果你使用的是较旧版本的git <2.0
,没有分支名称的git push可能会将所有branches & tags
推送到远程。确认这不是这种情况。
What else can you try?
强> # push just the tag name without refs/tags/...
git push origin :tagname
# same as above but with the `--delete` flag instead of `:`
git push --delete origin tagname
# as you already did locally - delete the tag as well
git tag -d tagname
Git hooks
强> 确认没有阻止您删除标签的git挂钩 这是一个示例钩子:
#!/bin/sh
log() { printf '%s\n' "$*"; }
error() { log "ERROR: $*" >&2; }
fatal() { error "$*"; exit 1; }
case $1 in
refs/tags/*)
[ "$3" != 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to delete tags"
[ "$2" = 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to move tags"
;;
# personal touch :-)
echo " "
echo " |ZZzzz "
echo " | "
echo " | "
echo " |ZZzzz /^\ |ZZzzz "
echo " | |~~~| | "
echo " | |- -| / \ "
echo " /^\ |[]+ | |^^^| "
echo " |^^^^^^^| | +[]| | | "
echo " | +[]|/\/\/\/\^/\/\/\/\/|^^^^^^^| "
echo " |+[]+ |~~~~~~~~~~~~~~~~~~| +[]| "
echo " | | [] /^\ [] |+[]+ | "
echo " | +[]+| [] || || [] | +[]+| "
echo " |[]+ | || || |[]+ | "
echo " |_______|------------------|_______| "
echo " "
echo " "
echo " This is your last time trying to "
echo " delete or to move our tags. :-) "
echo " "
esac
Git v2.0发行说明
向后兼容性说明
当
git push [$there]
没有说要推送什么时,我们已经使用了 到目前为止传统的matching
语义(所有分支都已发送 只要已经存在同名分支,就可以到远程控制台 在那边)。在Git 2.0中,默认为simple
语义, 推动:
只有当前分支到同名的分支,并且只有 当前分支设置为与该远程集成时 分支,如果你正在推送到同一个遥控器;或
只有当前分支到具有相同名称的分支,如果您 正在推送到一个不是你常去的地方的遥控器。
您可以使用配置变量
push.default
进行更改 这个。如果你是一个想要继续使用的老人matching
语义,您可以将变量设置为matching
, 例。阅读文档以了解其他可能性。
答案 1 :(得分:0)
一种方便的方式一次解决所有标签的问题:
1)要一次完成,可以从任何本地存储库中完成
git push <remoteName> :<tagToDelete>
# (for example) git push origin :tag_foo_bar
2)然后,从涉及的每个本地仓库中完成
git tag -d `git tag -d` && git fetch -t
这将列出然后删除存储库标签的所有本地副本,然后从远程重新获取它们。