似乎无法放弃Git中的更改

从命令行看到以下内容后:

# On branch RB_3.0.10
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   index.htm

我试图通过键入命令来放弃我的更改:

git checkout -- index.htm

但是当我重新运行git status时,它看起来完全一样。 结帐似乎没有工作。 难道我做错了什么? 我在windows / cygwin上使用GIT 1.6.1.2。

# On branch RB_3.0.10
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   index.htm

git diff会在文件上显示哪些更改? 在Windows上,我看到了线结束的问题,导致这样的问题。 在这种情况下,看看你有什么设置为git config core.autocrlfgit config core.safecrlf 。 这里有一些关于这些设置的文档。

我会说,如果你使用git svn与颠覆集成,那么确保autocrlf关闭。 从我可以告诉它只是在这个配置中被破坏,并且它使得大多数工具认为文件已经被改变,当你已经完成checkout以恢复任何改变时。

如果您在执行git checkout遇到问题,然后git status显示该文件仍然被修改,并且git diff显示文件在文件的每一行都被修改,那么这就是您所看到的问题。

core.autocrlf

如果为true,则在从文件系统读取文件时,使git将文本文件行中的CRLF转换为LF,并在写入文件系统时反向转换。 该变量可以设置为输入,在这种情况下,转换仅在从文件系统读取时发生,但文件在行末用LF写出。 目前,要考虑“文本”(即受到autocrlf机制)的路径完全取决于内容。

core.safecrlf

如果为true,则使git检查是否可转换由core.autocrlf控制的转换CRLF。 Git将验证命令是直接还是间接地修改工作树中的文件。 例如,提交文件后检出相同的文件应该在工作树中产生原始文件。 如果core.autocrlf的当前设置不是这种情况,那么git将会拒绝该文件。 变量可以设置为“警告”,在这种情况下,git只会警告不可逆的转换,但会继续操作。 ...


这是我的经验,在.git/config设置以下变量:

[core]
    autocrlf = false
    safecrlf = false
    eol = crlf

然后运行$ git checkout HEAD . ,它的工作原理。 但$ git checkout -- . 不是,奇怪!

* git版本1.9.3


这一直困扰着我一段时间,几乎每个我查看的回购都有我无法抛弃的变化。 长话短说,我尝试了上述所有,没有任何工作。 这是我做的,让事情恢复正常(在Mac上):

Completely remove the autocrlf & safecrlf settings from ~/.gitconfig
Completely remove the autocrlf & safecrlf settings from your repo's local config ./.git/config
git rm --cached -r .
git reset --hard
链接地址: http://www.djcxy.com/p/30013.html

上一篇: Can't seem to discard changes in Git

下一篇: Git file permissions on Windows