这里有许多关于的误解git reset --soft
。尽管有一个特定的条件(git reset --soft
只会HEAD
从分离的头部状态开始)发生变化(通常(并用于预期用途)),但它会移动您当前已签出的分支引用。当然,如果您没有签出分支机构,则无法执行此操作(因此特定条件git reset --soft
只会在其中发生变化HEAD
)。
我发现这是思考的最佳方法git reset
。您不仅在移动HEAD
(一切都在做),还在移动分支ref,例如master
。这类似于您在运行时git commit
(当前分支与一起移动HEAD
)时发生的情况,除了移至先前的提交而不是创建(并移至)新的提交。
这就是将分支reset
更改为新提交以外的内容而不更改的目的。HEAD
您可以在文档示例中看到以下内容:
撤消提交,使其成为主题分支
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
- 您已经进行了一些提交,但是意识到它们还不成熟,不能进入“ master”分支。您要继续在主题分支中对其进行润饰,因此请在当前HEAD之外创建“ topic / wip”分支。
- 倒退master分支以摆脱这三个提交。
- 切换到“ topic / wip”分支并继续工作。
这一系列命令的意义是什么?您想在此处移动分支,master
因此,在master
签出后,您可以运行git reset
。
在这里,票数最高的答案通常是好的,但我想我会添加它以纠正一些带有误解的答案。
更改您的分支
git reset --soft <ref>
:将当前签出的分支的分支指针重置为指定参考处的提交<ref>
。您的工作目录和索引中的文件不会更改。从此阶段提交将使您回到git reset
命令之前的状态。
也更改您的索引
git reset --mixed <ref>
或同等
git reset <ref>
:
做什么--soft
呢AND也是该指数将匹配提交在规定的基准复位。虽然git reset --soft HEAD
什么都不做(因为它说将已签出的分支移到已签出的分支),但是git reset --mixed HEAD
,或者等效地git reset HEAD
,这是一个常用且有用的命令,因为它会将索引重置为上一次提交的状态。
也更改您的工作目录
git reset --hard <ref>
:做什么--mixed
呢AND也覆盖你的工作目录。该命令与相似git checkout <ref>
,除了(这是关键点reset
)分支ref 指向的所有形式的git reset
移动HEAD
。
关于“这样的命令移动HEAD”的注释:
说一条命令移动并没有用HEAD
。任何更改提交历史记录中位置的命令都会移动HEAD
。这就是HEAD
它,它是指向您无论身在何处的指针。HEAD
是你,所以无论何时你都会移动。