git - 有人可以向我解释 git diff 在这里看到的区别吗?

标签 git msysgit

我在 Windows 7 上通过 msysgit 使用 git。最近让我很伤心的一个问题是,一旦我切换到某些分支,git 就会认为某些文件已被更改,然后我无法做任何事情来让它停止认为这些文件已更改。

在我的案例中重现的步骤(可能与每个人都不相关)如下:

  1. 检查 master 分支。
  2. 检查 pristine-3.7 分支。
  3. 检查 pristine-3.8 分支。
  4. 检查 pristine-3.9 分支。

此时,git 开始假设文件已经更改。

例如,这是 git diff 输出的屏幕截图。

git diff output

这是在十六进制模式下使用 Beyond Compare 对同一文件的差异输出。

enter image description here

最后,git 状态输出!

enter image description here

这是怎么回事?

问题更新:

一个可能的解决方案是在本地提交更改,然后删除该提交而不将提交中的更改放回工作状态。这是怎么做到的?

最佳答案

我经常遇到这个问题 - 唯一有效的是:

git rm --cached -r . > /dev/null # redirect if output is huge
git reset --hard

但请确保您没有要保留的更改

参见 git line endings - can't stash, reset and now can't rebase over spurious line endings commit

必须有人制作一个展示此行为的示例 repo 并将其发布到 git 跟踪器 - 这是一个错误(在 git reset --hard 和 co 应该立即工作的意义上)

编辑:确保您已阅读 required reading并设置一个 .gitattributes 文件

关于git - 有人可以向我解释 git diff 在这里看到的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266990/

相关文章:

svn - 使用具有一些尴尬权限的 git svn

windows - 在 Windows 上更新 Git Bash 后,仍然显示旧版本

git - 在 Windows 上的 Git Bash 中设置提示颜色

git - 你如何复制并粘贴到 Git Bash

运行 Git Bash 脚本的 Windows 快捷方式

git - 如何获取以前的标签名称?

克隆和原始远程存储库之间的 git diff

git子树 merge 忽略--prefix

iphone - 做 git status, objective c, git 时总是得到 Crashlytics is modified

git - Bash git别名选项卡完成错误