我在 Windows 7 上通过 msysgit 使用 git。最近让我很伤心的一个问题是,一旦我切换到某些分支,git 就会认为某些文件已被更改,然后我无法做任何事情来让它停止认为这些文件已更改。
在我的案例中重现的步骤(可能与每个人都不相关)如下:
- 检查 master 分支。
- 检查 pristine-3.7 分支。
- 检查 pristine-3.8 分支。
- 检查 pristine-3.9 分支。
此时,git 开始假设文件已经更改。
例如,这是 git diff 输出的屏幕截图。
这是在十六进制模式下使用 Beyond Compare 对同一文件的差异输出。
最后,git 状态输出!
这是怎么回事?
问题更新:
一个可能的解决方案是在本地提交更改,然后删除该提交而不将提交中的更改放回工作状态。这是怎么做到的?
最佳答案
我经常遇到这个问题 - 唯一有效的是:
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/