Can't seem to discard changes in Git

后端 未结 20 1258
傲寒
傲寒 2020-11-29 21:17

After seeing the following from the command line:

# On branch RB_3.0.10
# Changed but not updated:
#   (use \"git add ...\" to update what will b         


        
相关标签:
20条回答
  • 2020-11-29 21:56

    What changes does git diff show on the file? On windows, I've seen issues with line-endings causing issues like this. In that case, look at what settings you have for git config core.autocrlf and git config core.safecrlf. There is some documentation for these settings here.

    I would say, if you are using git svn for integration with subversion, then do make sure autocrlf is turned off. From what I can tell it is just broken in this configuration and it makes most of the tools think files have been changed, when you have done a checkout to revert any changes.

    If you are seeing a problem where you do git checkout, and then git status shows the file is still modified, and git diff shows the file is modified on every line in the file, then this is the problem you are seeing.

    core.autocrlf

    If true, makes git convert CRLF at the end of lines in text files to LF when reading from the filesystem, and convert in reverse when writing to the filesystem. The variable can be set to input, in which case the conversion happens only while reading from the filesystem but files are written out with LF at the end of lines. Currently, which paths to consider "text" (i.e. be subjected to the autocrlf mechanism) is decided purely based on the contents.

    core.safecrlf

    If true, makes git check if converting CRLF as controlled by core.autocrlf is reversible. Git will verify if a command modifies a file in the work tree either directly or indirectly. For example, committing a file followed by checking out the same file should yield the original file in the work tree. If this is not the case for the current setting of core.autocrlf, git will reject the file. The variable can be set to "warn", in which case git will only warn about an irreversible conversion but continue the operation. ...

    0 讨论(0)
  • 2020-11-29 21:57

    I also faced somewhat similar problem and the following steps helped me out:

    git commit -am 'temp commit'
    git pull origin master
    git reset head~1
    git reset head --hard
    

    Hope it helps other people as well.

    0 讨论(0)
  • 2020-11-29 21:59

    I ended up doing a git stash followed by a git stash clean to get rid of some. Didn't see any auto cr/lf configurations in .git/ or ~/.git stuff.

    0 讨论(0)
  • 2020-11-29 22:01

    It might be line endings, as @1800-information suggests, but another possibility is that the difference (that's preventing your from reverting these files with a checkout command) is one of file mode. This is what happened to me. On my version of git you can discover this by using

    git diff index.htm

    And it will show you file mode changes. It still won't let you revert them, though, using checkout, even with the -f option. For that use either

    git config core.filemode false

    or change your git .config in your text editor by adding

    [core]

    filemode = false
    

    After you do this, you can use

    git reset HEAD index.htm

    and the file should disappear.

    (I got all of this from the answers to How do I make git ignore mode changes (chmod)? and updating-file-permissions-only-in-git)

    0 讨论(0)
  • 2020-11-29 22:01

    This is an old question, but was still relevant to me. I did not find my answer until asking around the office, and discovered that the problem was with submodules. When they are updated, and your own repository does not reflect those changes, it shows up as having differences, reseting the head doesn't help. If this is the case, run:

    git status update
    

    That should help fix things (in this particular case)

    0 讨论(0)
  • 2020-11-29 22:04

    I had this issue and after trying all of the above, nothing worked.

    What worked for me was to delete the directory that the file was in, then did git status and made sure that all the files in that dir are now marked as deleted. After that I simply did git checkout -f and everything was back to normal.

    0 讨论(0)
提交回复
热议问题