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


为什么git允许我重置文件?我以为我明白了 reset,从某种意义上来说,它正在移动HEAD ......显然我错了。

所以, git reset sha file 好像做的一样 git checkout sha file,除了我看到的 file 在索引和工作目录中。

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


9450
2017-08-02 21:25


起源

可能重复 'git reset'和'git checkout'有什么区别? - nawfal


答案:


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中文件版本中的任何内容,而当您执行混合重置时,只会重置您的索引,并且您的工作目录仍将具有您所做的更改可以根据需要再次进行。


7
2017-08-02 23:13





git checkout

还原对文件的更改。

git reset

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


4
2017-08-02 21:27



所以 git reset 在任何PATH上,将它从暂存区域中删除,如果它是SHA,它会将HEAD移动到该变更集?那为什么有时git会这样说呢 git rm --cached 要不上台? - Senthess
我的经验是,在git中有不止一种方法可以做,这可能不是一个 好事。 - Pablo Fernandez