似乎无法放弃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状态时,它看起来完全一样。 结帐似乎没有工作。 难道我做错了什么? 我在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.autocrlf
和git config core.safecrlf
。 这里有一些关于这些设置的文档 。
我会说,如果你正在使用git svn
与颠覆集成,那么确保autocrlf
closures。 从我可以告诉它只是在这个configuration中被破坏,并且它使得大多数工具认为文件已经被改变,当你已经完成检出来恢复任何改变。
如果你看到一个问题,你做git checkout
,然后git status
显示该文件仍然被修改,和git diff
显示该文件中的每一行修改文件,那么这是你所看到的问题。
core.autocrlf
如果为true,则在从文件系统中读取文件时,将文本文件中的行尾的CRLF转换为LF,并在写入文件系统时将其转换为反向。 variables可以被设置为input,在这种情况下,转换只发生在从文件系统读取时发生,而文件在行尾被LF写出。 目前,要考虑“文本”(即受到autocrlf机制)的path是纯粹基于内容决定的。
core.safecrlf
如果为true,则使git检查是否可转换由core.autocrlf控制的转换CRLF。 Git会validation命令是直接还是间接地修改工作树中的文件。 例如,提交文件,然后检出相同的文件,应该在工作树中生成原始文件。 如果core.autocrlf的当前设置不是这种情况,那么git会拒绝这个文件。 variables可以设置为“警告”,在这种情况下,git只会警告不可逆的转换,但继续操作。 …
这是我的经验,在.git/config
设置以下variables:
[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
这可能是行结尾,因为@ 1800信息表明,但另一种可能性是差异(这是阻止你用恢复命令恢复这些文件)是文件模式之一。 这是发生在我身上的事情。 在我的版本的git上,你可以通过使用来发现这个
git diff index.htm
它会显示你的文件模式的变化。 它仍然不会让你恢复他们,虽然,使用结帐,即使使用-f选项。 为了那个用途
git config core.filemode false
或者通过添加在你的文本编辑器中改变你的git .config
[核心]
filemode = false
做完这个之后,你可以使用
git reset HEAD index.htm
该文件应该消失。
(我从这些答案中得到了所有这些如何使git忽略模式更改(chmod)?和更新 -file -permissions-only-git )
我想你需要传递-f
从man page( man git-checkout
,GIT-CHECKOUT(1)):
-f,–force
即使索引或工作树与HEAD不同,也要继续。
这是用来丢弃本地更改 。
例如,放弃当前分支上的更改并切换到另一个分支:
git checkout -f master
你在OSX或Windows? 如果是这样,问题可能是有两个同名的文件,不同的情况。 例如。 index.htm和Index.htm
Windows,默认情况下是OSX,使用不区分大小写的文件系统,与区分大小写的git冲突。
我有这个问题,尝试所有上述后,没有任何工作。
什么对我来说是删除文件所在的目录,然后做git status
,并确保该目录中的所有文件现在被标记为已删除。 之后,我只是做了git checkout -f
,一切恢复正常。
我有一个类似的问题,它不允许我放弃不存在或已被更改的文件。 我在工作中使用Visual Studio,并且发现在应用程序运行时切换分支时会发生这种情况。
git checkout
并试图放弃没有帮助。 它不会工作,或者只是告诉我,我没有权限。
解决scheme,工作:
- 进入安全模式
- 放弃文件
重新启动是一个痛苦,但这比尝试100件事情更快。
有一个简单的解决scheme。 如果发生这种情况(通常是意外的Windows关机或内存转储),你不能放弃你的改变,甚至在分支之间切换(Git说你没有足够的权限); 在Windows
环境中show all hidden files and folders
来自文件夹选项的show all hidden files and folders
夹。 转到你的GIT目录(应该以.git
开头)并删除"index.lock"
文件。 然后Git应该让你做任何你想做的事情。
我结束了做一个git stash
然后一个git stash clean
,摆脱一些。 没有看到.git /或〜/ .git东西中的任何自动cr / lfconfiguration。
在我的情况下,我不能放弃有关目录的变化。 例如,当我运行一个git diff时,我会看到: -Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
所以我打电话给那个目录,在那里运行一个git状态。 这是在一个HEAD分离状态。 然后,我只是在那里运行一个git checkout master
。 这使事情适合我。 但是这对于这里提到的确切场景没有帮助。
我也遇到了类似的问题,下面的步骤帮助我:
git commit -am 'temp commit' git pull origin master git reset head~1 git reset head --hard
希望它也能帮助其他人。
这是一个古老的问题,但仍然与我有关。 直到询问办公室时,我才find答案,发现问题出在子模块上。 当他们更新,而你自己的仓库不反映这些变化,它显示为有差异,重新设置头没有帮助。 如果是这种情况,请运行:
git status update
这应该有助于解决(在这种情况下)