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

bsa*_*mek 20 git revert

如果我对工作树进行了更改并且尚未提交,并且我想恢复我所做的更改,那么它们之间是否存在差异

git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

git checkout .
Run Code Online (Sandbox Code Playgroud)

kni*_*ttl 30

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

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

与refspec一起使用时:

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


Hom*_*man 5

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