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