向现有的Git标签添加新提交

50

我创建了一个 Git 标签,名称为v1.1,使用的命令是

git tag -a v1.1 -m 'my version 1.1'

我推送了那个标签。后来,我做了一些与v1.1相关的更改。现在,当我推送新更改并使用git describe检查git标签时,它显示为v1.1-g2dcc97

我该如何将我的新提交添加到现有标签中?


不确定您的确切意思。标签指向一个“精确”的提交。如果您基于标签所指向的提交进行进一步更改,则git describe将不会返回标签名称。如果您想要获取有关特定提交的确切标签名称,则必须对该提交进行标记。 - Magnus Bäck
1
git describe 显示您的当前状态(最新标签+此后的提交,(几个数字的)当前HEAD的哈希),即 v1.1-g2dcc97 表示“标签 v1.1,该提交的哈希值为 2dcc97...”。 - vonbrand
“git describe” 显示的不仅仅是标签名称。您的标签未被重命名。“git describe”只显示指向标签的提交哈希的缩写。 - Wolf
抱歉给您带来麻烦,您能否请看一下我的修改? - PVH
3个回答

74

如果您想在现有标签中添加新的提交,将违反重要的Git准则:永远不要修改已发布的提交。

在Git中,标签是不可变的。一旦您推送了一个标签,就应该让它保持不变。

但是,您可以在v1.1之上添加一些更改,并发布像v1.1.1v1.2这样的版本。其中一种方法是

# Create a new branch from tag v1.1
git checkout -b newbranch v1.1

# Do some work and commit it

# Create a new tag from your work
git tag -a -m "Tag version 1.1.1, a bugfix release" v1.1.1

(*) 除非你有非常特殊的理由,并且只有在你完全理解其影响时,即使如此也不要养成这个习惯。


11
然后执行 git push origin --tags (如果需要推送到 origin),将更改推送到你的origin远程仓库。 - Kristinn Örn Sigurðsson
结束时,严肃警告/建议 - asgs
1
将标签推送到远程仓库 git push origin tag_name例如 git push origin v1.1.1 - Shyam Pratap Singh

27

如果您绝对需要“移动”标签而不是创建新标签,则可以执行以下操作:

NB:正如@Chris所说,确保您有充分的理由不想创建新标签,因为最佳实践是创建一个新标签。

1. 检出标签(脱离HEAD状态)

git checkout tag/v1.1

2. 创建并检出基于该标签的分支(即从该标签分支)

git checkout -b my-tagged-branch

*** 进行工作并提交更改 ***

3. 推送到远程分支。

git push  -u origin my-tagged-branch
如果需要,在其他需要更改的分支中合并该分支(例如修复错误时)。
4. 在仍然在“my-tagged-branch”上的情况下,删除标签。
git tag -d v1.1
5. 再次创建标签:这将使标签指向该分支上最新的提交。
git tag v1.1
6. 删除远程上的标签。
git push origin :v1.1
7. 在远程上创建标签。
git push origin v1.1

3
我认为很多人认为标签意味着多个提交可以具有相同的标签(通常是这样的)。比如添加一个标签来表示某种类型的提交(例如:prod?)。但是,在git中,标签是唯一的,与提交相关联。
然而,如果你真的想使用之前使用过的标签,你需要从远程和本地删除它并重新创建。但你不应该这么做...
//remove remote tag
git push origin :tag_name

//remove tag from local
git tag -d tag_name

//add tag to latest commit
git tag tag_name

git log

git push origin tag_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接