我可以推送在分离的 HEAD 状态下进行的提交吗
Can I push a commit made in detached HEAD state
使用 git 我想进入分离的 HEAD 状态并创建一个新的提交。然后我想创建一个标签并将 'detached commit' 和标签推送到远程仓库。这可能吗?
如果我在我的本地存储库中创建分离的提交并创建一个标签,那么我可以签出该标签以返回到该状态。我想与远程仓库共享它,以便其他用户可以克隆仓库并签出标签并达到相同的状态。
我想这样做的原因是因为构建过程需要在文件中捕获构建 # 但我不想将其提交给正在进行开发的分支。我希望提交是独立的,但也想捕获提交并标记它,以便任何人都可以签出标记和构建中包含的文件。是否建议将提交推送到不同的分支,比如 "build"?
是的,这个 "this" 我的意思是主要问题 "can you push a tagged but not branch-contained commit?" - 非常好。请注意,git push
通过调用其他一些 Git 来工作(例如,ssh://... 或 https://... 通过 Internet 调用其他 Git-phone), 如有必要,提交一些提交,然后询问其他 Git: "please set a reference name to point to some specific commit(s)".
既然你有一个标签,你可以要求其他 Git 请设置相同的标签。假设遥控器被命名为 origin
(通常是这样):
git push origin <tag>
如果需要,您可以拼出全名,refs/tags/<em>tag</em>
。如果标签名称很容易与分支名称区分开来(例如,标签是 v2.x
并且分支永远不会以 v
开头),则永远不需要它(但通常它可能仍然是明智的)。
如果您没有标签,您仍然可以这样做,但是您必须为另一个 Git 提供一个 name。为此,您可以执行以下操作:
git push origin HEAD:refs/heads/newbranch
或:
git push origin HEAD:refs/tags/newtag
这里的棘手之处在于,在推送期间,您不知道他们是否已经有分支 newbranch
或标签 newtag
。如果您自己设置了标签,并且一直从他们那里获取标签,您可能有一个好主意——当然不能保证——他们也没有那个标签。
请注意,如果他们确实有那个名字,并且您礼貌地请求他们更改他们的名字以指向其他提交,他们可能会拒绝。这是当您从推送中看到 rejected
错误时。您可以命令它们(在 refspec 上使用 git push --force
或 +
前缀语法),但这通常不是正确的方法,而且它们仍然可以拒绝(这部分取决于控制另一部分的人) Git).
git tag mytag
git push origin mytag:mytag
这里 mytag:mytag 相当于 refs/tags/mytag:refs/tags/mytag
使用 git 我想进入分离的 HEAD 状态并创建一个新的提交。然后我想创建一个标签并将 'detached commit' 和标签推送到远程仓库。这可能吗?
如果我在我的本地存储库中创建分离的提交并创建一个标签,那么我可以签出该标签以返回到该状态。我想与远程仓库共享它,以便其他用户可以克隆仓库并签出标签并达到相同的状态。
我想这样做的原因是因为构建过程需要在文件中捕获构建 # 但我不想将其提交给正在进行开发的分支。我希望提交是独立的,但也想捕获提交并标记它,以便任何人都可以签出标记和构建中包含的文件。是否建议将提交推送到不同的分支,比如 "build"?
是的,这个 "this" 我的意思是主要问题 "can you push a tagged but not branch-contained commit?" - 非常好。请注意,git push
通过调用其他一些 Git 来工作(例如,ssh://... 或 https://... 通过 Internet 调用其他 Git-phone), 如有必要,提交一些提交,然后询问其他 Git: "please set a reference name to point to some specific commit(s)".
既然你有一个标签,你可以要求其他 Git 请设置相同的标签。假设遥控器被命名为 origin
(通常是这样):
git push origin <tag>
如果需要,您可以拼出全名,refs/tags/<em>tag</em>
。如果标签名称很容易与分支名称区分开来(例如,标签是 v2.x
并且分支永远不会以 v
开头),则永远不需要它(但通常它可能仍然是明智的)。
如果您没有标签,您仍然可以这样做,但是您必须为另一个 Git 提供一个 name。为此,您可以执行以下操作:
git push origin HEAD:refs/heads/newbranch
或:
git push origin HEAD:refs/tags/newtag
这里的棘手之处在于,在推送期间,您不知道他们是否已经有分支 newbranch
或标签 newtag
。如果您自己设置了标签,并且一直从他们那里获取标签,您可能有一个好主意——当然不能保证——他们也没有那个标签。
请注意,如果他们确实有那个名字,并且您礼貌地请求他们更改他们的名字以指向其他提交,他们可能会拒绝。这是当您从推送中看到 rejected
错误时。您可以命令它们(在 refspec 上使用 git push --force
或 +
前缀语法),但这通常不是正确的方法,而且它们仍然可以拒绝(这部分取决于控制另一部分的人) Git).
git tag mytag
git push origin mytag:mytag
这里 mytag:mytag 相当于 refs/tags/mytag:refs/tags/mytag