似乎无法放弃Git的变化

115 git revert

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

# 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
Run Code Online (Sandbox Code Playgroud)

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

git checkout -- index.htm
Run Code Online (Sandbox Code Playgroud)

但是当我重新运行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
Run Code Online (Sandbox Code Playgroud)

Fra*_*tin 41

这一直困扰着我一段时间,几乎我检查的每一个回购都有我无法丢弃的变化.长话短说,我尝试了以上所有,没有任何效果.这就是我为了让事情恢复正常而做的事情(在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
Run Code Online (Sandbox Code Playgroud)

  • 尝试了以上所有内容后,这是唯一对我有用的东西(在Windows上) (6认同)

180*_*ION 35

git diff文件上显示了哪些更改?在Windows上,我看到了行尾的问题导致了这样的问题.在这种情况下,请查看您拥有的设置git config core.autocrlfgit config core.safecrlf.这里有一些关于这些设置的文档.

我会说,如果你git svn用于与subversion集成,那么请确保autocrlf关闭.据我所知,它只是在这个配置中被破坏了,它使得大多数工具都认为文件已被更改,当你完成了checkout还原任何更改时.

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

core.autocrlf

如果为true,则在从文件系统读取时将git将CRLF在文本文件的行末尾转换为LF,并在写入文件系统时反向转换.该变量可以设置为输入,在这种情况下,转换仅在从文件系统读取时发生,但文件在行末用LF写出.目前,考虑"文本"(即受到自动机制机制)的哪些路径纯粹基于内容来决定.

core.safecrlf

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

  • 我假设他的意思是将它旋转至少90度 (4认同)
  • 当我将 core.autocrlf 和 core.safecrlf 都设置为 true 时,我能够通过运行“git reset --hard HEAD”来丢弃检测到的违规文件中的更改。 (2认同)

Nia*_*ang 35

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

[core]
    autocrlf = false
    safecrlf = false
    eol = crlf
Run Code Online (Sandbox Code Playgroud)

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

*git版本1.9.3

  • 这样做对我来说.我不知道`git checkout HEAD .`和`git checkout .`之间有区别. (3认同)

has*_*sen 15

我想你需要通过 -f

从手册页(man git-checkout,GIT-CHECKOUT(1)):

-f, - force
即使索引或工作树与HEAD不同,也要继续.
这用于丢弃本地更改.

例如,丢弃当前分支上的更改并切换到其他分支:

git checkout -f master
Run Code Online (Sandbox Code Playgroud)

  • 通过什么?很高兴能够完成答案 (7认同)

Eya*_*yal 10

它可能是行结尾,正如@ 1800-information所暗示的那样,但另一种可能性是(差异(阻止你用checkout命令恢复这些文件)是文件模式之一.这就是发生在我身上的事.在我的git版本上你可以通过使用来发现它

git diff index.htm

它会显示文件模式的变化.但是,即使使用-f选项,它仍然不会让你使用checkout来还原它们.对于那个用途

git config core.filemode false

或者通过添加在文本编辑器中更改你的git .config

[核心]

filemode = false
Run Code Online (Sandbox Code Playgroud)

执行此操作后,您可以使用

git reset HEAD index.htm

并且文件应该消失.

(我得到了这一切从回答如何使git的忽略模式的改变(CHMOD)?更新文件的权限,只合的git)


Mik*_*nte 7

我的问题有点类似,我刚刚发现 git 正在跟踪文件权限的更改。我尝试丢弃并重置分支,但文件仍然存在。运行git config --get --local core.filemode,如果为 true 那么您需要将其设置为 false 以关闭文件权限的跟踪。跑步git config --local core.fileMode false应该可以解决。你可以在这里阅读更多

  • 就我而言,我尝试了公认的解决方案,但这不起作用。当我进行 git diff 时,它抱怨文件权限。因此,当我将 core.fileMode 设置为 false 并重新运行命令时: `git rm --cached -r .` `git reset --hard` (2认同)

Fil*_*Fil 5

您在OSX还是Windows上?如果是这样,问题可能出在两个名称相同但大小写不同的文件中。例如。index.htm和Index.htm

Windows和默认情况下的OSX使用不区分大小写的文件系统,该文件系统与区分大小写的git冲突。