Is there a difference between git reset --hard HEAD and git checkout .?
If I make changes to the working tree and have not yet committed, and I would like to revert the changes I have made, is th开发者_如何学编程ere a difference between
git reset --hard HEAD
and
git checkout .
?
git checkout -- .
will obviously only work on the current directory (and subdirectories thereof), git reset --hard
will operate on the complete working tree.
git checkout -- .
will only update the working tree and leave already staged files as is, whereas git reset --hard
will match index and working tree with the HEAD commit.
when used with a refspec:
reset
will set the current branch head to the given commit (and matches index and working tree)checkout
will switch to that branch, leaving local changes intact, when they touch files which did not change between the current branch and the branch to be checked out
These answers are good. I'd like to add that if you have deleted files, which are staged but not yet committed, then a git checkout .
alone will not bring the deleted files back into the workspace. A git reset --hard
will.
精彩评论