我理解git reset
命令在历史记录(*)中向后移动分支,并且它移动的分支是HEAD
指向的分支。
所以我很好奇,我试图在detached HEAD state
中调用它来看看会发生什么。我期待错误,但是git做了些什么,我只是无法弄清楚它做了什么。
在我签出并进入HEAD
之前,Git的行为是否仍然指向detached HEAD state
?
[编辑1] 我实际上已经弄明白了。它与一个未处于分离头部状态时完全相同,只是它不会向后移动任何分支。它只是
[编辑2(*)] git reset
实际上只在指定旧提交时在历史记录中向后移动分支。在执行git reset HEAD
时,它会将分支留在原处(请参阅下面的注释)。
答案 0 :(得分:4)
只是强调:
据我所知,git reset命令总是在历史记录中向后移动分支
这是不正确的,你可能想编辑你的问题,以避免混淆新的git人。例如,git reset --hard
不会这样做,它只是在不移动HEAD或分支的情况下清除工作目录和索引。
事实上,省略<commit>
中的可选git reset [<commit>]
的所有变体都不会移动头部和分支。 git reset
的其他选项执行其他操作,并非所有选项都移动HEAD。因此,移动HEAD只是git reset
可以执行的几项操作之一。
答案 1 :(得分:3)
git reset
使当前分支和HEAD移动到特定提交。如果它是一个分离的HEAD,它只会移动HEAD。
答案 2 :(得分:-1)
如果您只运行:git reset
它执行git add
的相反操作,这是非阶段性更改......
git reset
命令有三种形式,每种形式都有相关选项并执行不同的操作。如果您想深入了解,请查看git reset文档。