git重置文件和git checkout文件有什么区别?

时间:2011-08-02 21:25:12

标签: git reset git-checkout

为什么git允许我重置文件?我以为我理解reset,因为它正在移动HEAD ...显然我错了。

因此,git reset sha file似乎与git checkout sha file相同,但我在索引和工作目录中看到file

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

2 个答案:

答案 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

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