是的,这个——我所说的“这个”是指主要问题,“你能推送一个标记但不是包含分支的提交吗?”——完全没问题。请注意,git push
通过调用其他 Git(例如,ssh://... 或 https://... 通过 Internet 电话调用其他 Git),如有必要,提交一些提交,然后询问其他 Git:“请设置参考名称以指向某些特定的提交”。
由于您有标签,您可以要求其他 Git 设置相同的标签。假设遥控器被命名origin
(通常是这样):
git push origin <tag>
如果需要,您可以拼出全名 , 。如果标签名称很容易与分支名称区分开来(例如,标签是并且分支从不以 开头),则永远不需要它(但通常它仍然是明智的)。refs/tags/tag
v2.x
v
如果你没有标签,你仍然可以这样做,但你必须为另一个 Git 提供一个name。为此,您将执行以下操作:
git push origin HEAD:refs/heads/newbranch
或者:
git push origin HEAD:refs/tags/newtag
这里的棘手之处在于,在推送期间,您不知道它们是否已经有分支newbranch
或标签newtag
。如果您自己设置了一个标签,并且一直从他们那里获取,您可能有一个好主意——当然不能保证——他们也没有那个标签。
请注意,如果他们确实有该名称,并且您礼貌地要求他们更改名称以指向其他提交,他们可能会拒绝。这是您rejected
从推送中看到错误的时候。您可以命令它们(使用git push --force
或+
refspec 上的前缀语法),但这通常不是正确的方法,而且它们仍然可以拒绝(这部分取决于控制另一个 Git 的人)。