使用git我想进入分离的HEAD状态并创建一个新的提交。然后,我想创建一个标记,并将“分离提交”和标记推送到远程仓库。这可能吗?
如果我在本地仓库中创建分离提交并创建标记,那么我可以签出标记以返回到该状态。我想与远程仓库分享,以便其他用途可以克隆仓库并签出标签并进入相同的状态。
我想这样做的原因是因为构建过程需要在文件中捕获构建#但我不想将其提交到正在进行开发的分支。我希望提交是独立的,但也希望捕获提交并标记它,以便任何人都可以签出标记和构建中包含的文件。是否建议将提交推送到不同的分支,比如说“build”?
答案 0 :(得分:7)
是的,这个 - “这个”我的意思是主要的问题,“你能推出一个标记但不包含分支的提交吗?” - 完全没问题。请注意,git push
通过调用其他一些Git(例如,ssh:// ...或https:// ...通过Internet电话调用其他Git)来工作,提供一些提交如有必要,然后询问其他Git:“请设置一个引用名称以指向某些特定的提交”。
由于你有一个标签,你可以要求其他Git请设置相同的标签。假设遥控器名为origin
(通常是这样):
git push origin <tag>
如果需要,您可以拼出全名refs/tags/tag
。如果标签名称很容易与分支名称区分开来(例如,标签是v2.x
而分支从不以v
开头),那么它将不再需要(但它通常仍然是明智的)。
如果你没有标签,你仍然可以这样做,但你必须提供另一个Git 名称。要做到这一点,你会做类似的事情:
git push origin HEAD:refs/heads/newbranch
或:
git push origin HEAD:refs/tags/newtag
这里的棘手问题是,在推送过程中,您不知道他们是否已经拥有分支newbranch
或标记newtag
。如果你自己设置了一个标签,并且一直都是从它们那里获取标签,你可能有一个好主意 - 当然不是保证 - 他们也没有这个标签。
请注意,如果他们做具有该名称,并且您礼貌地请求他们更改他们的名称以指向其他提交,他们可能会拒绝。这是当您从推送中看到rejected
错误时。您可以命令它们(在refspec上使用git push --force
或+
前缀语法),但这通常不是正确的方法,而且它们仍然可以拒绝(该部分取决于控制另一方的人) GIT)。
答案 1 :(得分:0)
git tag mytag
git push origin mytag:mytag
这里 mytag:mytag 相当于 refs / tags / mytag:refs / tags / mytag