Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git cannot undo modified files

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.

like image 887
WickyNilliams Avatar asked Oct 09 '12 23:10

WickyNilliams


People also ask

How do I revert a modified file in git?

If you have modified, added and committed changes to a file, and want to undo those changes, then you can again use git reset HEAD~ to undo your commit. Similar to the previous example, when you use git reset the modifications will be unstaged.

How do I Unstage all files?

In order to unstage all files and directories, execute “git reset” and they will be removed from the staging area back to your working directory.


2 Answers

Contributing my case: There was a file that had a modified state and I could not reset this file using git reset --hard. None of the above commands helped me, the file just was always in modified state.
What was more interesting is that this issue persisted even after the new clone! But git gave me a hint:

... bla bla bla git clone ....
Resolving deltas: 100% (37818/37818), done.
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'a/b/c/Myfile.kt'
  'a/b/c/MyFile.kt'

It's turned out that someone on a case-sensitive file system (linux) had accidentally committed two files with the same name, but in different cases and different content. And when I opened this repo on a case-insensetive file system (macOs, windows), git thought that this is the same file and always showed me it as "modified" from MyFile.kt to Myfile.kt or from Myfile.kt to MyFile.kt.

So, I just removed an irrelevant file and leaved only one.

like image 64
Feedforward Avatar answered Sep 29 '22 10:09

Feedforward


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.

like image 29
Tom Panning Avatar answered Sep 29 '22 09:09

Tom Panning