繁体   English   中英

git reset 文件和 git checkout 文件有什么区别?

[英]What's the difference between git reset file and git checkout file?

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

因此, git reset sha file似乎与git checkout 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM