Why does Git insist that a file has been modified even after a `git checkout --`?
git, line-endings
Solution
I had a core.autocrlf is false, but recently changed to true and also apply gitattributes changes for .net. After that, in many repositories, when you try to pull, I began to receive reports on the changes which not exist, and are also unable to roll back. In the end, I went back to core.autocrlf is false
Problem
I made a change to a couple of files locally, without committing them. `git status` shows: ``` >> git status # On branch feature-ravendb # Your branch is ahead of 'origin/feature-ravendb' by 1 commit. # # 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: source/Octopus.Tentacle/Integration/PowerShell/IPowerShell.cs # modified: source/Octopus.Tentacle/Integration/PowerShell/PowerShellRunner.cs # no changes added to commit (use "git add" and/or "git commit -a") ``` I want to discard the changes to those files. I tried following the instructions: ``` >> git checkout -- .\source\Octopus.Tentacle\Integration\PowerShell\IPowerShell.cs ``` The command has no output. Now I run `git status` again: ``` >> git status # On branch feature-ravendb # Your branch is ahead of 'origin/feature-ravendb' by 1 commit. # # 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: source/Octopus.Tentacle/Integration/PowerShell/IPowerShell.cs # modified: source/Octopus.Tentacle/Integration/PowerShell/PowerShellRunner.c # no changes added to commit (use "git add" and/or "git commit -a") ``` Hmm, it's pretty convinced that the file has changed. And `git diff <file>` seems to think that the whole file has changed, even though it hasn't: ``` diff --git a/source/Octopus.Tentacle/Integration/PowerShell/IPowerShell.cs b/source/Octo --- a/source/Octopus.Tentacle/Integration/PowerShell/IPowerShell.cs +++ b/source/Octopus.Tentacle/Integration/PowerShell/IPowerShell.cs @@ -1,9 +1,9 @@ -<EF><BB><BF>using System; - -namespace Octopus.Tentacle.Integration.PowerShell -{ - public interface IPowerShell - { - PowerShellExecutionResult Execute(PowerShellArguments arguments); - } +<EF><BB><BF>using System; + +namespace Octopus.Tentacle.Integration.PowerShell +{ + public interface IPowerShell + { + PowerShellExecutionResult Execute(PowerShellArguments arguments); + } } \ No newline at end of file ``` How do I convince git that I really, really haven't changed the file and don't want to commit it? Edit: The following commands also have no effect on these modifications: - `git checkout -- .` - `git checkout -f` - `git reset --soft` - `git reset --hard` Edit 2: Reverting back to an older revision, stashing my changes, then clearing the stash eventually worked. It seems like my line endings are conflicting but I don't know why: - I have `core.autocrlf` set to true - I have a `.gitattributes` file with the line `*.cs text` Shouldn't this be enough?