将git标签转换为分支

问题描述 投票:0回答:1

我克隆了一个版本库。仓库里有几个分支,但也有一个标签。现在,我被指示使用该标签的版本。

然而,我必须进行一些整合,并从该标签中进行更多的提交。

我不知道这个标签在分支结构中的位置,所以我想做的是将这个标签转化为一个分支(现在,在签出这个标签后,我进入了一个 "dettached状态"),这样以后我就可以进行提交合并等等。

有什么方法可以做到这一点吗?

git tags git-branch
1个回答
3
投票

你可以直接查看这个标签,然后创建一个新的分支。

git checkout tag_name

然后创建一个新的分支,因为标签是只读的,你只需要把修改推送到分支上(为了修复错误或功能)。

git checkout -b new_branch

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 <[email protected]> 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 仓库 知道 它是一个标签名称,它的意思是 承诺。 现在你打算改变这个事实? 这对那些其他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指出,您可以在对标签进行签出后,按名称创建分支;或者您可以进行 git checkout -b new-branch tag-name 一次性完成)。)

© www.soinside.com 2019 - 2024. All rights reserved.