2016-07-19 112 views
-1

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

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

Git的行为像HEAD仍然指向我检查出去之前,并进入detached HEAD state


[编辑1]事实上,我理解了它。它与不处于分离头部状态时的情况完全相同,只是它不会向后移动任何分支。这是唯一的

[编辑2(*)]git reset实际上只指定一个较旧的承诺时,落后的历史变化的分支。在做git reset HEAD时,它将离开分支(见下面的注释)。

+0

你应该用你运行的确切命令来更新你的问题......有三种形式的git reset ...每个都有参数..最常见的用途是执行git add oposite操作... –

+0

I'不确定这件事很重要。由于每个版本的git reset都至少会做一件事情:它将当前分支移动到不同的位置。而且,因为在一个独立的头部中并没有真正的当前分支,所以我想知道会发生什么 – Radioreve

回答

3

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

+0

事实上,我刚刚检查过,只有HEAD动作。但后来git告诉我,我已经取消了文件,这就是我想知道的。那些文件是什么?他们是我从头部提交的头文件,还是我刚刚签出的头文件(当时我提交的那些文件) – Radioreve

+0

@Radioreve'git reset'有一些选项,如'--soft ',' - 混合',' - 硬'。 '--mixed'是默认值。假设提交历史记录是“A-B-C”。如果'git reset B',等于'git reset B --mixed',则HEAD移动到B,但从B到C的变化保持不分离。如果'git reset B --soft',所做的更改保持未提交。如果'git reset B --hard',则更改将被丢弃。在'git reset'后,运行'git status'来检查。 – ElpieKay

-1

如果您刚刚运行:git reset

它执行的git add这是unstage变化相反的操作...

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

2

只是强调:

我明白git的复位命令总是在历史上向后移动一个分支,

这是不正确的,你可能需要编辑你的问题,以避免混淆新的git人。例如,git reset --hard不会这样做,它只是在不移动HEAD或分支的情况下清除工作目录和索引。

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

+0

你说得对,谢谢你指出。 – Radioreve

+0

从概念上讲,'git reset' * *总是会移动HEAD,这就是说,如果你从现在的位置移动到现在的位置,那么这个移动太小了,太快了:-)没有人能看到你移动,他们拒绝相信你移动了。 :-)然而,你绝对正确的说,它不必向后移动:它可以移动到现在的位置(非移动的“移动”),向前移动或向旁边移动(“跳跃轨道”到一个不相关的提交)。 – torek

+0

我看到你在那里做了什么......只是一点点跳到左边...... – AnoE

相关问题