git status显示修改,git checkout - <file>不会删除它们

git status显示修改,git checkout - <file>不会删除它们

我想删除对我的工作副本的所有更改。

运行git status显示修改的文件。

我没做什么似乎删除了这些修改。

例如:


rbellamy@PROMETHEUS /d/Development/rhino-etl (master)

$ git status

# On branch master

# 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs

#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs

#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj

#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs

#

no changes added to commit (use "git add" and/or "git commit -a")


rbellamy@PROMETHEUS /d/Development/rhino-etl (master)

$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs


rbellamy@PROMETHEUS /d/Development/rhino-etl (master)

$ git status

# On branch master

# 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs

#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs

#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj

#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs

#

no changes added to commit (use "git add" and/or "git commit -a")


rbellamy@PROMETHEUS /d/Development/rhino-etl (master)

$ git checkout `git ls-files -m`


rbellamy@PROMETHEUS /d/Development/rhino-etl (master)

$ git statu

万千封印
浏览 1813回答 3
3回答

慕容708150

可能导致此行为的问题有多个:行结束规范化我也遇到过这类问题。它归结为git自动将crlf转换为lf。这通常是由单个文件中的混合行结尾引起的。该文件在索引中被规范化,但是当git再次对其进行非规范化以将其与工作树中的文件区分开来时,结果是不同的。但是,如果要解决此问题,则应禁用core.autocrlf,将所有行结尾更改为lf,然后再次启用它。或者您可以通过执行以下操作完全禁用它:git&nbsp;config&nbsp;--global&nbsp;core.autocrlf&nbsp;false您也可以考虑使用文件而不是core.autocrlf.gitattribute。这样,您可以确保使用repo的每个人都使用相同的规范化规则,从而防止混合行结尾进入存储库。还要考虑设置core.safecrlf来警告你是否希望git在执行不可逆的规范化时发出警告。git&nbsp;联机帮助说:CRLF转换有可能破坏数据。autocrlf = true将在提交期间将CRLF转换为LF,在结账时将LF转换为CRLF。无法通过git重新创建在提交之前包含LF和CRLF混合的文件。对于文本文件,这是正确的做法:它校正行结尾,这样我们在存储库中只有LF行结尾。但对于意外归类为文本的二进制文件,转换可能会破坏数据。不区分大小写的文件系统在不区分大小写的文件系统上,当存储库中存在具有不同大小的相同文件名时,git会尝试检出两者,但只有一个文件系统最终结束。当git尝试比较第二个时,它会将它与错误的文件进行比较。解决方案是切换到不区分大小写的文件系统,但在大多数情况下这是不可行的,或者重命名并在另一个文件系统上提交其中一个文件。

青春有我

我在Windows上遇到了这个问题,但是我没有准备好调查使用的后果config --global core.autocrlf false我也不准备放弃我的藏品中的其他私人分支和好东西,并从一个新的克隆开始。我只需要完成一些事情。现在。这对我有用,因为你让git完全重写你的工作目录:git&nbsp;rm&nbsp;--cached&nbsp;-r&nbsp;.git&nbsp;reset&nbsp;--hard(请注意,在原始问题的评论中建议之前,运行只是git reset --hard不够好,也没有明确rm的文件reset)

侃侃无极

另一个可能对人有用的解决方案,因为没有一个文本选项适合我:用.gitattributes一行替换内容:* binary。这告诉git将每个文件视为二进制文件,它无法执行任何操作。检查违规文件的消息是否消失;&nbsp;如果不是,你可以git checkout -- <files>将它们恢复到存储库版本git checkout -- .gitattributes将.gitattributes文件恢复到其初始状态检查文件是否仍未标记为已更改。
打开App,查看更多内容
随时随地看视频慕课网APP