为什么git允许我重置文件?我以为我理解reset
,因为它正在移动HEAD ...显然我错了。
因此,git reset sha file
似乎与git checkout sha file
相同,但我在索引和工作目录中看到file
。
对我来说没有意义。有人可以解释一下这个区别吗?
答案 0 :(得分:8)
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中文件版本中的任何内容,而当你执行混合重置时,只有你的索引将是重置,您的工作目录仍然会有更改,您可以根据需要稍后再次进行更改。
答案 1 :(得分:5)
git checkout
恢复对文件的更改。
git reset
从暂存区域中删除文件,但保留更改。