我可以推送在分离的HEAD状态下进行的提交

Ste*_*fer 5 git git-push git-branch git-detached-head

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

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

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

tor*_*rek 7

是的,这个 - "这个"我的意思是主要的问题,"你能推出一个标记但不包含分支的提交吗?" - 完全没问题.请注意,git push通过调用其他一些Git(例如,ssh:// ...或https:// ...通过Internet电话调用其他Git),在必要时提供一些提交,然后问其他Git:"请设置一个引用名称以指向某些特定的提交".

由于你有一个标签,你可以要求其他Git请设置相同的标签.假设远程命名origin(通常是这样):

git push origin <tag>
Run Code Online (Sandbox Code Playgroud)

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

如果你没有标签,你仍然可以这样做,但你必须为另一个Git提供一个名字.要做到这一点,你会做类似的事情:

git push origin HEAD:refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)

要么:

git push origin HEAD:refs/tags/newtag
Run Code Online (Sandbox Code Playgroud)

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

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