我已经运行了以下命令来忽略监视/跟踪特定的目录/文件:

git update-index --assume-unchanged <file>

我如何撤销这一点,以便<文件>再次被监视/跟踪?


当前回答

如果这是一个您经常使用的命令,您可能也需要考虑为它设置一个别名。添加到全局的.gitconfig:

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged

如何设置别名(如果你还不知道):

git config --configLocation alias.aliasName 'command --options'

例子:

git config --global alias.hide 'update-index --assume-unchanged'
git config... etc

保存到.gitconfig后,可以运行一个更清洁的命令。

git hide myfile.ext

or

git unhide myfile.ext

这个git文档非常有用。

根据注释,这也是一个有用的别名,可以找出当前隐藏的文件:

[alias]
    hidden = ! git ls-files -v | grep '^h' | cut -c3-

其他回答

如果你想撤销应用的所有文件,假设没有任何状态,而不仅仅是缓存(git用小写字符标记它们),你可以使用以下命令:

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged

Git ls-files -v将打印所有文件及其状态 Grep '^[a-z]'将过滤文件并只选择假定不变的文件 Cut -c 3-将删除状态,只留下路径,从第3个字符切割到结束 Tr '\012' '\000' '将行尾字符(\012)替换为零字符(\000) Xargs -0 git update-index——no-assume-unchanged将所有由零字符分隔的路径传递给git update-index——no-assume-unchanged来撤销

Git update-index函数有几个选项,你可以输入如下:

git update-index --help

在这里你会发现各种选项-如何处理函数update-index。

[如果你不知道文件名]

git update-index --really-refresh 

[如果你知道文件名]

git update-index --no-assume-unchanged <file>

将恢复所有已添加到忽略列表中的文件。

git update-index --assume-unchanged <file>

添加到@adardesign的答案中,如果你想一次性将所有已添加到假设不变列表中的文件重置为no-assume-unchanged,你可以执行以下操作:

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

这将从grep中删除输出的两个字符,即。"h ",然后转义文件名中可能出现的任何空格,最后|| true将防止命令在循环中的某些文件出现错误时过早终止。

如果你正在使用Git扩展,请按照以下步骤进行操作:

进入提交窗口。 单击名为Working directory changes的下拉菜单。 选择显示假定未更改的文件选项。 右键单击要取消预设的文件。 选择“不假设不变”。

你完成了。

要撤消/显示设置为assume-unchanged的dir's/files,执行以下命令:

git update-index --no-assume-unchanged <file>

要获得一个目录下的未修改的文件列表,运行以下命令:

git ls-files -v|grep '^h'