如何在git中故意分离头部?

如何在git中故意分离头部?,git,git-checkout,Git,Git Checkout,如果我做了git签出头^,我会得到以下结果: $ git checkout HEAD^ Note: checking out 'HEAD^'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any br

如果我做了
git签出头^
,我会得到以下结果:

$ git checkout HEAD^
Note: checking out 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at...
$
git资深用户可能对此非常熟悉。但如果我做了git checkout HEAD,什么都不会发生:

$ git checkout HEAD
$

我想在当前分支的头部为提交创建“分离头”状态。如何执行此操作?

此命令从任何给定的分支名称(在本例中为master)创建分离的head状态:

签出提交散列也会自动创建分离的头状态,无需
^0

git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0
当然还有更短的散列:

git checkout 823112f
自git 1.7.5(2011年4月)以来,您可以使用
git checkout--detach
命令。
(,您将使用git开关--detach)

checkout
:介绍
--detach
同义词“
git checkout foo^{commit}
” 例如,在进行临时合并以测试两个主题是否能够很好地协同工作时,可以使用此选项


(git 1.7.11.3,2012年7月)不允许在未出生的分支上分离,因此这不会在空
头上失败:

git checkout --orphan foo
git checkout --detach
git symbolic-ref HEAD

只有即将发布的git 1.8.4.2或1.8.5(2013年第4季度)澄清了语法。 见:

将本例分为两种语法形式,模仿描述部分显示此用法的方式。
同时更新解释将提交命名为分离
HEAD
at以澄清的语法的文本


不确定您在SHA签出时是否需要
^0
位,但我还没有测试过这一点……知道它与提交哈希和标记名一起工作仍然很有用。这使得在与git相关的脚本中很容易使用,而不必担心您是在处理标记名、提交哈希还是分支名。@Mat:这与解释性消息所说的差不多。我想做一些实验性的承诺,或重新调整或修改,但我不需要保留我的更改。所以我正在尝试创建一个分支的一次性副本。为什么不创建一个分支,并在完成后将其删除?同样的效果。当你想删除你当前所在的分支时,它非常有用。“如何有意分离一个头部”将是一个令人敬畏的标题…对于将一台机器上的更改合并到另一台机器上非常有用,因为它们位于远程跟踪分支上,但只有一台机器可以看到另一台机器(例如笔记本电脑/服务器)。在服务器上运行
git checkout--detach
,然后在笔记本电脑上运行
git push server
,然后在服务器上运行
git checkout master
,查看笔记本电脑上所做的更改。为此,这肯定比
master ^0
方法更好。在新初始化的repo中,
git checkout--detach
失败,错误消息为
fatal:您在一个尚未出生的分支上
@ChrisMartin是的,这是预期的。您至少需要先进行一次提交。如果不进行提交,就不可能进入分离头状态?@ChrisMartin detached head表示直接签出提交。如果你没有任何承诺。。。不可能有分离的头部。
git checkout --orphan foo
git checkout --detach
git symbolic-ref HEAD
'git checkout' [--detach] <commit>::
git checkout --detach