我想删除Git仓库中所有标签(本地和远程),除了最新的一个。我已经阅读了有关删除所有标签的文章,但找不到有关选择性删除的信息,即删除除最新标签外的所有标签。
不知怎么的,我在 Stack Overflow 上找到了答案。根据我的需求进行了一些定制。
删除所有远程标签但保留最新的
git describe --abbrev=0 --tags `git rev-list --tags --skip=1` | xargs -n 1 git push --delete origin
git describe --abbrev=0 --tags `git rev-list --tags --skip=1` | xargs -n 1 git tag -d
v0.0.*
的 Git 标签。 - Taku我不相信在 Git CLI 中有一种选择性删除标签的方法。可能有一些工具可以让你做到这一点,但我不知道。您可以编写一个小脚本来实现所需的效果。以下是一个 PowerShell 片段,可以实现所需的效果。要运行它,您需要 posh-git。
git tag -l | Out-File E:\Git\DemoRepo\tags.txt
$lines = Get-Content E:\Git\DemoRepo\tags.txt | Measure-Object -Line
Write-Host "Number of lines: $($lines.Lines)"
$numberOfOlderTags = $lines.Lines - 1
$tagsToDelete = Get-Content E:\Git\DemoRepo\tags.txt | Select-Object -First $numberOfOlderTags
foreach($tagToDelete in $tagsToDelete)
{
git tag --delete $tagToDelete
}
origin
的家伙也有标签,等等。你可以删除自己喜欢的任何标签,并要求那个叫origin
的家伙删除他自己喜欢的任何标签,但他是否遵守取决于他自己;如果 Valerie 有标签并打电话给origin
并将她的标签给他,那么她可能会拥有你正在删除的origin
上的标签,并且会立即全部归还!(这就是为什么这很重要的原因:要问自己的问题是“谁还有这些标签?”) - torekA
分支上提交代码并将其标记为feature/1.1,然后将A
合并到master
,那么master
将会有该提交;2)Joe已经拉取了master
,因此他获得了该提交和标签,并作为本地标签;3)我删除了origin
上的标签和我的本地标签,但Joe仍然拥有该标签;4)问题:Joe能否将标签推送到远程?5)问题:如果我在origin
上删除标签后,Joe拉取了master
或任何A
分支,他的本地标签是否会被删除? - SKADgit push --tags
推送。至于 (5),默认答案是不,但我不确定如果 Joe 运行git fetch --tags
是否带有--prune
会发生什么。 - torek