2011-08-02 176 views
10

为什么git允许我重置文件?我认为我理解reset,因为它是在移动HEAD ......显然我错了。git reset文件和git checkout文件有什么区别?

因此,git reset sha file似乎与git checkout sha file一样,除了我在索引和工作目录中看到file

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

+0

可能重复['git reset'和'git checkout'之间的区别?](http://stackoverflow.com/questions/3639342/whats-the-difference-between-git-reset-and-git -checkout) – nawfal

回答

3
git checkout 

恢复对文件的更改。

git reset 

从临时区域中删除文件,但保留更改。

+0

因此,在任何PATH上'git reset',将其从暂存区域中移除,并且如果它是SHA,它会将HEAD移动到该更改集?那为什么有时候git建议把'git rm --cached'放到不活动的位置? – Senthess

+1

我的经验是,有不止一种方式在git中做事情,这可能不是一件好事情。 –

6

git reset--soft--hard--mixed(和--keep--merge

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

--mixed是默认的,非常重要的标志,当你做git reset sha file你正在做mixed复位,其中:

- 混合

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

就像上面说的那样,这种情况下的重置根本不会碰到你的工作树,只有索引中的版本重置为沙中的版本。

在另一方面git checkout

当或--patch给出,GIT中结帐不切换 分支。它从 索引文件或命名(通常是提交)更新工作树中的命名路径。

所以,当你做git checkout,你将失去在该文件中的变化,它会与任何在那里,在沙版本的文件,而当你做混合复位,只有你的索引将被重置更换并且您的工作目录仍然会有变化,您可以稍后再根据需要进行更改。

相关问题