Git忽略对文件的本地更改

Git忽略对文件的本地更改,git,git-extensions,Git,Git Extensions,我在Git Extensions中启动了一个提交,以将更改添加到文件myfile。然后我猜我点击了我不想点击的地方,现在我对myfile所做的任何更改都被git忽略了。我已经关闭了git扩展,并且只在powershell中运行 如果我更改了文件,git status没有显示任何差异。但是如果我添加了带有git add myfile的文件(尽管没有理由假设它没有被跟踪,但它在上次提交时被更改),那么git status仍然不会显示它。如果我删除.gitignore,那么.gitignore将显示在

我在Git Extensions中启动了一个提交,以将更改添加到文件
myfile
。然后我猜我点击了我不想点击的地方,现在我对
myfile
所做的任何更改都被git忽略了。我已经关闭了git扩展,并且只在powershell中运行

如果我更改了文件,
git status
没有显示任何差异。但是如果我添加了带有
git add myfile
的文件(尽管没有理由假设它没有被跟踪,但它在上次提交时被更改),那么
git status
仍然不会显示它。如果我删除
.gitignore
,那么
.gitignore
将显示在
git状态中,但
myfile
仍然不会显示

如果我更改远程上的文件并执行git pull
,git将确认我的本地文件:

error: Your local changes to the following files would be overwritten by merge:
        myfile
Please commit your changes or stash them before you merge.
Aborting
Updating 09ad056..eef460f
但是我不能提交(因为我不能添加),而且
git-stash
不会隐藏
myfile
。我可以删除
myfile
,然后
git pull
工作,但在这之后,我就开始了:没有确认任何本地更改

我从未观察过这种行为,也无法复制它。如何进一步调试并解决此问题

现在找到了解决方案: 我一定是无意中点击了这里

有两个不是很公开的标志,
假定未更改
跳过工作树
,它们可以在本地存储库中的文件上设置,并从本地版本控制中“隐藏”它们

可以使用设置/取消设置这些标志,您可以使用并检查每行开头的状态字母来发现具有其中一个(或两个)标志的文件

从我们在评论中的讨论中可以看出:显然,某些操作在您的文件上设置了该标志。
现在您知道了如何发现这些文件,以及如何取消设置该标志

我对Git扩展不太熟悉,您可以从它的GUI中找到执行相同操作(set/unset/list)的方法


打包一个相当完整的引用
——假定未更改

# set the flag :
git update-index --assume-unchanged <file>

# unset the flag :
git update-index --no-assume-unchanged <file>

# check for lines where the status letter is in *lowercase* :
git ls-files -v

# using grep :
git ls-files -v | grep '^[a-z]'

正如您已经发现的,很少有方法可以忽略git和git扩展名中的文件更改

这些选项也通过每个文件的上下文菜单显示在“提交”对话框中:

您还可以更改过滤器以查看更多或更少的内容:

这是意料之中的。如果跟踪文件有未提交的更改,git不想覆盖它。--“我在Git扩展中启动了提交”是什么意思?@evolutionxbox Git extensions是一个gui,用于最初发生错误的windows,用于调试我移到shell中的程序。如果我更改了一个跟踪的文件,我确实希望它在git状态下显示在
更改未暂存提交下
可能是该GUI的问题?考虑在其他地方克隆回购并再试一次吗?“进化论箱,我想重新克隆会起作用,但我想知道为什么在我关闭GUI之后,仍然会出现简单的Git错误。”code>myfile
skip worktree
根据
git ls files-v
--假设未更改的
--skip worktree
不同。facepalm感谢您指出@jthill
# set the flag :
git update-index --skip-worktree <file>

# unset the flag :
git update-index --no-skip-worktree <file>

# check for lines where the status letter is 'S' (or 's') :
git ls-files -v

# using grep :
git ls-files -v | grep '^[Ss]'