Question

I just want to get back to a clean working directory, exactly as it was after my last commit. Git is reporting to me a load of file modifications that I haven't made, so I suspect it's something to do with line endings.

I have tried all the usual suspects to do this:

git reset --hard git commit -- . git stash git clean -fd

No matter what I do, git status always shows the same files as having been modified. What can I do? I have uncommitted changes stashed in another branch so I don't want to just blast away everything, but rather just "roll back" my master branch.

EDIT: Output

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   demo/index.html
#   modified:   demo/js/app.js
#   modified:   demo/js/libs/jquery.1.7.1.js
#   modified:   demo/js/libs/matchMedia.js
#   modified:   demo/js/libs/modernizr.js
#   modified:   demo/js/loadr.js
#   modified:   dist/enquire.js
#   modified:   src/include/intro.js
#
no changes added to commit (use "git add" and/or "git commit -a")

Then I try what is suggested and everything else I could find:

WickyNilliams at Nick MBA in ~/Repositories/enquire on master*
$ git checkout -- .
WickyNilliams at Nick MBA in ~/Repositories/enquire on master*
$ git reset --hard
HEAD is now at d70fee4 added meta tag to test demo on mobile #10
WickyNilliams at Nick MBA in ~/Repositories/enquire on master*
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   demo/index.html
#   modified:   demo/js/app.js
#   modified:   demo/js/libs/jquery.1.7.1.js
#   modified:   demo/js/libs/matchMedia.js
#   modified:   demo/js/libs/modernizr.js
#   modified:   demo/js/loadr.js
#   modified:   dist/enquire.js
#   modified:   src/include/intro.js
#
no changes added to commit (use "git add" and/or "git commit -a")

As you can see, no changes despite the rollback.

So then I followed advice and ran a diff ignoring all space, and as suspected it seems there's no differences when ignoring spaces - so i guess it was line endings! What can I do to fix this? I've set to autocrlf to true to no avail.

Was it helpful?

Solution

If you want to just change a file back to the way it was after the last commit, just do a git checkout [file] to get a particular file. But a git reset --hard should have done that to the whole tree. If you think it's just the line-endings, do a git diff and then a git diff --ignore-all-space. If the first diff shows changes and the second one doesn't, then at least you know you have a line-ending problem, in which case you might want to look at this description of git and line endings.

OTHER TIPS

Try the approach explained in the "Re-normalizing a repo" section of this github article after making sure your EOL settings have sensible values (for your OS and repo policy)

In my case neither git checkout -- . nor git reset --hard nor git clean -fd . did help regardless of the order - there were still one directory left which was "modified". So I've changed into the particular directory and run git checkout -- . from here. Don't know exactly the underlying reasons for why I had to change the directory first but it has surprisingly helped to get rid of those modifications.

If Git thinks your files are modified due to its attempts to auto-normalize line endings (which will be true if git diff shows differences, but git diff --ignore-all-space does not), your best solution may be to turn off line ending modification for your project. This works well if your team all uses the same platform (Windows, Linux, etc.) for a given set of files.

To turn off line ending modification for your project, open or create .gitattributes at the root of your repository. Ensure that the file contains this line:

* -text

If the file existed and has a different setting for *, such as * text=auto, replace it with the above line.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top