7

使用 git 我想进入分离的 HEAD 状态并创建一个新的提交。然后我想创建一个标签并将“分离提交”和标签推送到远程仓库。这可能吗?

如果我在本地 repo 中创建分离的提交并创建一个标签,那么我可以签出标签以返回该状态。我想与远程仓库共享它,以便其他用户可以克隆仓库并签出标签并进入相同的状态。

我想这样做的原因是因为构建过程需要在文件中捕获构建#,但我不想将其提交给正在进行开发的分支。我希望提交是单独的,但也希望捕获提交并对其进行标记,以便任何人都可以签出标记和构建中包含的文件。是否建议将提交推送到不同的分支,比如“构建”?

4

2 回答 2

9

是的,这个——我所说的“这个”是指主要问题,“你能推送一个标记但不是包含分支的提交吗?”——完全没问题。请注意,git push通过调用其他 Git(例如,ssh://... 或 https://... 通过 Internet 电话调用其他 Git),如有必要,提交一些提交,然后询问其他 Git:“请设置参考名称以指向某些特定的提交”。

由于您有标签,您可以要求其他 Git 设置相同的标签。假设遥控器被命名origin(通常是这样):

git push origin <tag>

如果需要,您可以拼出全名 , 。如果标签名称很容易与分支名称区分开来(例如,标签是并且分支从不以 开头),则永远不需要它(但通常它仍然是明智的)。refs/tags/tagv2.xv

如果你没有标签,你仍然可以这样做,但你必须为另一个 Git 提供一个name。为此,您将执行以下操作:

git push origin HEAD:refs/heads/newbranch

或者:

git push origin HEAD:refs/tags/newtag

这里的棘手之处在于,在推送期间,您不知道它们是否已经有分支newbranch或标签newtag。如果您自己设置了一个标签,并且一直从他们那里获取,您可能有一个好主意——当然不能保证——他们也没有那个标签。

请注意,如果他们确实有该名称,并且您礼貌地要求他们更改名称以指向其他提交,他们可能会拒绝。这是您rejected从推送中看到错误的时候。您可以命令它们(使用git push --force+refspec 上的前缀语法),但这通常不是正确的方法,而且它们仍然可以拒绝(这部分取决于控制另一个 Git 的人)。

于 2016-05-12T23:07:16.870 回答
0

git tag mytag git push origin mytag:mytag 这里mytag:mytag等价于 refs/tags/mytag:refs/tags/mytag

于 2016-05-13T13:23:08.560 回答