为什么 git 允许我重置文件?我以为我理解reset
了,从某种意义上说,它正在移动 HEAD……显然我错了。
所以,git reset sha file
似乎和 一样git checkout sha file
,除了我file
在索引和工作目录中看到的。
这对我来说没有意义。有人可以解释一下区别吗?
为什么 git 允许我重置文件?我以为我理解reset
了,从某种意义上说,它正在移动 HEAD……显然我错了。
所以,git reset sha file
似乎和 一样git checkout sha file
,除了我file
在索引和工作目录中看到的。
这对我来说没有意义。有人可以解释一下区别吗?
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 中文件版本中的任何内容,而当您进行混合重置时,只有您的索引将被重置,您的工作目录仍然有您可以在以后根据需要再次进行更改。
git checkout
恢复对文件的更改。
git reset
从暂存区域中删除文件,但保留更改。