Git 重置为分离的 HEAD 状态

Git reset in detached HEAD state

我知道 git reset 命令在历史中向后移动一个分支 (*),并且它移动的分支是 HEAD 指向的分支。

所以我很好奇,我试着在 detached HEAD state 中调用它,看看会发生什么。我期待错误,但 git 做了一些事情,我只是无法弄清楚它做了什么。

Git 是否表现得像 HEAD 仍然指向我退房并进入 detached HEAD state 之前的位置?


[ 编辑 1 ] 我真的想通了。它与当一个人不处于分离的头部状态时完全相同,只是它不向后移动任何分支。只是

[ Edit 2(*) ] git reset 实际上只在指定较旧的提交时向后移动一个分支。当执行 git reset HEAD 时,它会将分支留在原处(请参阅下面的评论)。

git reset 使当前分支和 HEAD 移动到特定的提交。如果它是一个分离的 HEAD,它只会移动 HEAD。

如果您 运行 只是:git reset

它执行与 git add 相反的操作,即未分级的更改...

git reset 命令有三种形式,每种形式都有相关的选项并执行不同的操作。如果您想深入了解,请查看 git reset 文档。

强调一下:

I understand that the git reset command always moves a branch backwards in the history,

这是不正确的,您可能需要编辑您的问题以避免让 git 的新手感到困惑。例如,git reset --hard 不会那样做,它只是擦除工作目录和索引,而不移动 HEAD 或分支。

事实上,在 git reset [<commit>] 中省略可选 <commit> 的所有变体都不会移动头部或分支。 git reset 的其他选项做其他事情,不是所有的都移动 HEAD。所以四处移动 HEAD 只是 git reset 可以做的几个动作之一。