Git:使用 1 个命令将标签推送到新的远程分支

Git:使用 1 个命令将标签推送到新的远程分支

Git push 接受源和目标 refspec 作为推送操作的一部分,但我似乎无法在单个命令中将本地标签推送为新的远程分支。我知道我可以签出标签然后推送它,但这应该可以作为单个命令来实现。

我尝试过的:

git push origin refs/tags/0.0.1:new_branch

会发生什么:

Counting objects: 1, done.
Writing objects: 100% (1/1), 156 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 1 (delta 0)
To '■■■■■■■■■■■■■■■■■■■■■■■■■■■■.com/test.git'
  * [new tag]         0.0.1 -> new_branch

我也尝试过使用其他变体来remotes/origin/master代替 master,但是这也会创建一个新标签,而不是基于该标签创建一个远程分支。

答案1

git push origin refs/tags/0.0.1^{commit}:refs/heads/new_branch

我从这里的另一个答案中找到了答案。 https://stackoverflow.com/a/4061542/6669458

答案2

您可以随时直接推送标签,它将被推送至与分支分离的位置。

git push origin 0.0.1

会发生什么:

Counting objects: 1, done.
Delta compression using up to 8 threads.
Compressing objects: 100% 1/1), done.
Writing objects: 100% (1/1), 685 bytes | 0 bytes/s, done.
Total 1 (delta 1), reused 0 (delta 0)
To [email protected]:group-something/test.git
 * [new tag]         0.0.1 -> 0.0.1

如果您想使用 ref 语法,则如下所示:

git push origin refs/tags/0.0.1:refs/tags/0.0.1

结果完全一样。

在这两种情况下,您都需要注意您正在推送一个分离的头。这意味着任何拉取或获取的人都不会得到这个标记的头。您需要使用参数进行获取--tags。否则,只会拉取分支中的标签。因此,只有当您这样做时:

git fetch --tags

您将获得标签引用的“分离的”头部。

remote: Counting objects: 6, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From [email protected]:group-something/test
 * [new tag]         0.0.1 -> 0.0.1

相关内容