将git标签转换为分支

时间:2020-05-29 03:54:56

标签: git tags git-branch

我克隆了一个存储库。在存储库中,有几个分支,但也有一个标签。 现在,已指示我使用该标签的版本。

但是我必须进行一些集成,并从该标签进行更多提交。

我不知道该标签在分支结构中的什么位置,所以我想做的就是将该标签转换为分支(现在,在签出该标签后,我进入了“分离状态” ),以便以后可以进行合并合并等。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

您只需签出标签:

git checkout tag_name

然后,由于标签是只读的,因此可以从中创建一个新分支,并且您仅将更改推送到该分支(用于错误修复或功能):

git checkout -b new_branch

答案 1 :(得分:2)

标签是提交的名称。分支名称也是如此:

$ git rev-parse master
d2ecc46c0981fb829fdfb204604ed0a2798cbe07
$ git rev-parse v2.21.0^{commit}
8104ec994ea3849a968b4667d072fedd1e688642

现在,您可能想知道^{commit}在这里做什么。这是因为标签通常也是带注释的标签对象的名称,该对象随后将提交命名为:

$ git rev-parse v2.21.0
2bb64867dc05d9a8432488ddc1d22a194cee4d31
$ git cat-file -p 2bb64867dc05d9a8432488ddc1d22a194cee4d31
object 8104ec994ea3849a968b4667d072fedd1e688642
type commit
tag v2.21.0
tagger Junio C Hamano <gitster@pobox.com> 1551023739 -0800

Git 2.21
-----BEGIN PGP SIGNATURE-----
[snip]

如果要在标签选择的提交处开始分支,只需执行以下操作:

git branch newbranch v2.21.0

您不需要^{commit},因为git branch本身会为您指出:

$ git branch newbranch v2.21.0
$ git rev-parse newbranch
8104ec994ea3849a968b4667d072fedd1e688642

您可能不应该要做的是删除标记名称并创建一个标识正确提交的新分支名称,也不要创建与标记名称相同的分支名称。这两个都是允许的,但都无法产生令人满意的结果。

尤其是,一旦有了标签,此后从每个Git存储库中获取它的知道是标签名,并且意味着那个 strong>提交。现在您打算改变这一事实?这对其他Git存储库不利。

同时,如果您创建的分支和标签名称拼写相同,则Git并不总是以您想要的方式解决问题。那是:

$ git branch v2.21.0 v2.21.0
$ git rev-parse v2.21.0
warning: refname 'v2.21.0' is ambiguous.
2bb64867dc05d9a8432488ddc1d22a194cee4d31

有时,名称v2.21.0现在将表示分支名称。有时,这将意味着标签。根据设计,由于分支的名称会随着分支的增长而从一个提交(分支的旧提示)移动到另一个提交(分支的新提示),因此在将来,这两个名称将解决两个不同的提交。

只需使用其他名称。 (而且,作为ROOT points out,您可以按名称签出标签后创建分支;也可以执行git checkout -b new-branch tag-name一次完成所有分支。)

相关问题