55

如果我这样做git checkout HEAD^,我会得到这个:

$ 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
$

我想为当前分支头部的提交创建“分离的 HEAD”状态。我怎么做?

4

2 回答 2

50

从 git 1.7.5(2011 年 4 月)开始,您可以使用该git checkout --detach命令。
从 Git 2.23(2019 年第三季度)开始,您将使用git switch --detach

请参阅提交 326696

checkout: 介绍“ ”--detach的同义词git checkout foo^{commit}

例如,在进行临时合并以测试两个主题是否可以很好地协同工作时,可能会使用它。


提交 8ced1aa(git 1.7.11.3,2012 年 7 月)不允许--detach在未出生的分支上,所以这不会在 null 上失败HEAD

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

只有即将发布的 git 1.8.4.2 或 1.8.5(2013 年第四季度)阐明了语法。请参阅提交 26776c9

将这种情况分成两种句法形式,模仿说明部分显示这种用法的方式。
还要更新解释语法的文本以将要分离的提交命名HEAD为澄清。

'git checkout' [--detach] <commit>::

准备在 之上工作<commit>,通过分离HEAD它(参见“DETACHED HEAD”部分),更新索引和树将是提交中记录的状态加上本地修改。

  1. <commit>参数是分支名称时,该--detach选项可用于HEAD在分支的尖端分离(git checkout <branch>将在不分离的情况下检查该分支HEAD)。

  2. 在当前分支的顶端省略<branch>分离HEAD

最后一点正是您想要为当前分支做的事情:

git checkout --detach
于 2013-10-21T13:26:43.330 回答
11

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

git checkout master^0

检查提交哈希也会自动创建一个分离的头部状态,不需要^0

git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0

当然还有更短的哈希值:

git checkout 823112f
于 2012-11-08T16:15:26.607 回答