在git重置后——很难,git状态给了我在Changes not staging for commit:部分中的文件。
我也试过git reset ., git checkout。而git check - out-index -f -a,毫无用处。
那么,我怎样才能摆脱这些未分阶段的变化呢?
这似乎只影响Visual Studio项目文件。奇怪。请看这个粘贴:http://pastebin.com/eFZwPn9Z。这些文件的特殊之处在于,在.gitattributes中我有:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
另外,在我的全局.gitconfig中,selflf被设置为false。这有什么关系吗?
我遇到了一个类似的问题,也涉及.gitattributes,但我的案例涉及GitHub的LFS。虽然这并不完全是OP的场景,但我认为它提供了一个机会来说明.gitattributes文件的功能以及为什么它会以“幻影”差异的形式导致未分阶段的更改。
在我的例子中,一个文件已经在我的存储库中,就像从一开始一样。在最近的一次提交中,我添加了一个新的git-lfs跟踪规则,使用的模式事后看来有点太宽泛了,最终匹配了这个古老的文件。我知道我不想改变这个文件;我知道我没有更改文件,但现在它在我的非阶段性更改中,无论对该文件进行多少签出或硬重置都无法修复它。为什么?
GitHub LFS extension works primarily through leveraging the hooks that git provides access through via the .gitattributes file. Generally, entries in .gitattributes specify how matching files should be processed. In the OP's case, it was concerned with normalizing line endings; in mine, it was whether to let LFS handle the file storage. In either case, the actually file that git sees when computing a git diff does not match the file that you see when you inspect the file. Hence, if you change how a file is processed via the .gitattributes pattern that matches it, it will show up as unstaged changes in the status report, even if there really is no change in the file.
综上所述,我对这个问题的“回答”是,如果.gitattributes文件中的更改是您想要做的,那么您应该只添加更改并继续前进。如果不是,那么修改.gitattributes以更好地表示您想要做的事情。
参考文献
GitHub LFS规范-很好地描述了它们如何钩子到clean和smudge函数调用中,用一个带散列的简单文本文件替换git对象中的文件。
gitattributes文档——所有可用于自定义git如何处理文档的细节。
我遇到的另一种可能性是,存储库中的一个包最终具有分离的HEAD。如果这里的答案都没有帮助,你遇到了这样的git状态消息,你可能有同样的问题:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: path/to/package (new commits)
进入路径/to/package文件夹,git状态应该产生以下结果:
HEAD detached at 7515f05
下面的命令应该修复这个问题,master应该被你的本地分支替换:
git checkout master
您将得到一条消息,您的本地分支将在远程分支后面提交一些数量的文件。快点拉,你应该脱离险境了!