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

Sen*_*ess 14 git reset git-checkout

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

所以,git reset sha file似乎做同样的事情git checkout sha file,除了我file在索引和工作目录中看到的.

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

man*_*lds 9

git reset COMMIT FILE有非常重要的标志git checkout COMMIT FILE,git reset--soft(--hard--mixed)

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

--keep是默认值,当你这样做时--merge你正在--mixed重置:

--mixed

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

如上所述,在这种情况下,重置根本不会触及您的工作树,只有索引中的版本重置为sha中的版本.

git reset sha file 另一方面:

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

因此,当你这样做时,mixed你将丢失文件中的更改,它将替换为sha中文件版本中的任何内容,而当您执行混合重置时,只会重置您的索引,并且您的工作目录仍将具有您可以根据需要再次进行更改.


Pab*_*dez 7

git checkout
Run Code Online (Sandbox Code Playgroud)

还原对文件的更改.

git reset
Run Code Online (Sandbox Code Playgroud)

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