git reset - hard HEAD和git checkout之间有区别吗?

时间:2011-02-26 18:16:37

标签: git revert

如果我对工作树进行了更改并且尚未提交,并且我想恢复我所做的更改,那么

是否存在差异
git reset --hard HEAD

git checkout .

2 个答案:

答案 0 :(得分:29)

git checkout -- .显然只能在当前目录(及其子目录)上运行,git reset --hard将在完整的工作树上运行。

git checkout -- .只会更新工作树并保留已经暂存的文件,而git reset --hard会将索引和工作树与HEAD提交相匹配。

与refspec一起使用时:

  1. reset会将当前分支头设置为给定的提交(并匹配索引和工作树)
  2. 当他们触摸当前分支和要检出的分支之间没有变化的文件时,
  3. checkout将切换到该分支,保持本地更改不变。

答案 1 :(得分:5)

这些答案都很好。我想补充一点,如果你删除了已暂存但尚未提交的文件,那么单独使用git checkout .就不会将删除的文件带回工作区。一个git reset --hard会。