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