17

为什么 git 允许我重置文件?我以为我理解reset了,从某种意义上说,它正在移动 HEAD……显然我错了。

所以,git reset sha file似乎和 一样git checkout sha file,除了我file在索引和工作目录中看到的。

这对我来说没有意义。有人可以解释一下区别吗?

4

2 回答 2

12

tl; dr git reset COMMIT FILE仅更改索引,git checkout COMMIT FILE将更改索引和工作树。

git reset--soft有非常重要的,--hard--mixed(--keep--merge)标志

http://git-scm.com/docs/git-reset

--mixed是默认设置,当你这样做时,git reset sha file你正在mixed重置:

--混合

重置索引但不重置工作树(即保留更改的文件但未标记提交)并报告尚未更新的内容。这是默认操作。

就像上面说的那样,在这种情况下,重置根本不会触及您的工作树,只有索引中的版本被重置为 sha 中的版本。

git checkout另一方面:

当或 --patch 给出时, git checkout 不会切换分支。它从索引文件或命名(通常是提交)更新工作树中的命名路径。

因此,当您这样做时,git checkout您将丢失文件中的更改,并将其替换为 sha 中文件版本中的任何内容,而当您进行混合重置时,只有您的索引将被重置,您的工作目录仍然有您可以在以后根据需要再次进行更改。

于 2011-08-02T23:13:52.600 回答
8
git checkout

恢复对文件的更改。

git reset

从暂存区域中删除文件,但保留更改。

于 2011-08-02T21:27:30.730 回答