Unstaged changes left after git reset --hard
After git reset --hard
, git status
gives me files within the Changes not staged for commit:
section.
I've also tried git reset .
, git checkout -- .
and git checkout-index -f -a
, to no avail.
So, how can I get rid of those unstaged changes?
This seems to hit only Visual Studio project files. Weird. See this paste: http://pastebin.com/eFZwPn9Z. What is special with those files, is that in .gitattributes I have:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
Also, autocrlf
is set to false in my global .gitconfig
. Could that be somehow relevant?
Solution 1:
I had the same problem and it was related to the .gitattributes
file.
However the file type that caused the problem was not specified in the .gitattributes
.
I was able to solve the issue by simply running
git rm .gitattributes
git add -A
git reset --hard
Solution 2:
I have resolved this problem using following steps
-
Remove every file from Git's index.
git rm --cached -r .
-
Rewrite the Git index to pick up all the new line endings.
git reset --hard
Solution was part of steps described on Configuring Git to handle line endings
Solution 3:
Git won't reset files that aren't on repository. So, you can:
$ git add .
$ git reset --hard
This will stage all changes, which will cause Git to be aware of those files, and then reset them.
If this does not work, you can try to stash and drop your changes:
$ git stash
$ git stash drop
Solution 4:
If you use Git for Windows, this is likely your issue
I've had the same problem and stash, hard reset, clean or even all of them was still leaving changes behind. What turned out to be the problem was the x file mode that was not set properly by git. This is a "known issue" with git for windows. The local changes show in gitk and git status as old mode 100755 new mode 100644, without any actual file differences.
The fix is to ignore the file mode:
git config core.filemode false
More info here