为什么git允许我重置文件?我以为我明白了 reset
,从某种意义上来说,它正在移动HEAD ......显然我错了。
所以, git reset sha file
好像做的一样 git checkout sha file
,除了我看到的 file
在索引和工作目录中。
这对我没有意义。有人可以解释一下这个区别吗?
为什么git允许我重置文件?我以为我明白了 reset
,从某种意义上来说,它正在移动HEAD ......显然我错了。
所以, git reset sha file
好像做的一样 git checkout sha file
,除了我看到的 file
在索引和工作目录中。
这对我没有意义。有人可以解释一下这个区别吗?
git reset
有非常重要的旗帜 --soft
, --hard
和 --mixed
(和 --keep
和 --merge
)
http://git-scm.com/docs/git-reset
--mixed
是默认值,当你这样做 git reset sha file
你在干嘛 mixed
重置:
--mixed
重置索引但不重置工作树(即更改的文件) 保留但未标记为提交)并报告尚未提交的内容 更新。这是默认操作。
如上所述,在这种情况下,重置根本不会触及您的工作树,只有索引中的版本重置为sha中的版本。
git checkout
另一方面:
当给出或--patch时,git checkout不会切换 分支机构。它从中更新工作树中的命名路径 索引文件或来自命名(通常是提交)。
所以,当你这样做 git checkout
您将丢失文件中的更改,它将替换为sha中文件版本中的任何内容,而当您执行混合重置时,只会重置您的索引,并且您的工作目录仍将具有您所做的更改可以根据需要再次进行。
git checkout
还原对文件的更改。
git reset
从暂存区域中删除文件,但保留更改。