582

I have run the following command to ignore watching/tracking a particular directory/file:

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

How can I undo this, so that <file> is watched/tracked again?

4

11 回答 11

735

要获取设置为假设不变的撤消/显示目录/文件,请运行以下命令

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

要获取正在assume-unchanged运行的目录/文件的列表:

git ls-files -v|grep '^h'
于 2013-06-19T15:58:36.427 回答
130

如果这是您经常使用的命令 - 您可能还需要考虑为其设置别名。添加到您的全局.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

或者

git unhide myfile.ext

这个git 文档非常有帮助。

根据评论,这也是找出当前隐藏的文件的有用别名:

[alias]
    hidden = ! git ls-files -v | grep '^h' | cut -c3-
于 2014-08-19T15:26:49.927 回答
45

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>
于 2014-06-17T10:21:11.427 回答
45

为了综合来自@adardesign、@adswebwork 和@AnkitVishwakarma 的优秀原始答案,以及来自@Bdoserror、@Retsam、@seanf 和@torek 的评论,以及额外的文档链接和简洁的别名...

基本命令

要将假定未更改的文件重置为正常状态:

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

列出所有假定不变的文件:

git ls-files -v | grep '^[a-z]' | cut -c3-

要将所有假定未更改的文件重置为正常:

git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --

注意:已在别处列出的此命令似乎不再重置所有假定未更改的文件(我相信它曾经并且以前将其列为解决方案):

git update-index --really-refresh

捷径

为了使这些常见任务在 git 中易于执行,请为您的用户添加/更新以下别名部分.gitconfig(例如~/.gitconfig在 *nix 或 macOS 系统上):

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git unhide --
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
于 2018-05-16T16:20:28.103 回答
40

我假设(呵呵)你的意思是--assume-unchanged,因为我没有看到任何--assume-changed选项。的倒数--assume-unchanged--no-assume-unchanged

于 2013-06-19T15:58:25.427 回答
22

如果要撤消所有已应用的文件,假设任何状态都保持不变,而不仅仅是缓存(git 按小写字符标记它们),可以使用以下命令:

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -v将打印所有文件及其状态
  2. grep '^[a-z]'将过滤文件并选择仅假设不变
  3. cut -c 3-将删除状态并只留下路径,从第 3 个字符切到末尾
  4. tr '\012' '\000'将行尾字符 (\012) 替换为零字符 (\000)
  5. xargs -0 git update-index --no-assume-unchanged将所有由零字符分隔的路径传递git update-index --no-assume-unchanged给撤消
于 2016-01-01T07:29:28.030 回答
12

添加到@adardesign的答案,如果您想一次性重置所有已添加到assume-unchanged列表中的文件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 ie 输出的两个字符"h ",然后转义文件名中可能存在的任何空格,最后|| true会防止命令过早终止,以防循环中的某些文件出现错误。

于 2014-02-13T06:06:23.803 回答
4

如果您使用的是Git Extensions,请按照以下步骤操作:

  1. 转到提交窗口。
  2. 单击名为Working directory changes的下拉菜单。
  3. 选择Show assummed-unchanged files选项。
  4. 右键单击要取消假设的文件。
  5. 选择不假设不变

你完成了。

于 2017-11-22T05:06:40.867 回答
0

在 Windows 中,没有一个解决方案对我有用 - 它似乎使用大写H而不是h文件状态,并且 grep 命令需要一个额外的插入符号,因为它^也代表行的开头以及否定下一个字符。

视窗解决方案

  1. 打开 Git Bash 并切换到相关的顶级目录。
  2. git ls-files -v | grep '^^H'列出所有未缓存的文件
  3. git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree撤消文件跳过通过完成的所有文件update-index --skip-worktree
  4. git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged撤消文件跳过通过完成的所有文件update-index --assume-unchanged
  5. git ls-files -v | grep '^^H'再次列出所有未缓存的文件并检查上述命令是否有效 - 现在不应返回任何内容
于 2020-04-25T12:22:13.343 回答
0

这里没有什么是未涵盖的。但想加我的 2 美分。有时,我运行一个构建,它改变了很多文件,然后我想处理一些东西,所以这个命令真的对我有很大帮助。

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

希望其他人也觉得它有用。

于 2018-12-03T09:33:20.253 回答
-3

所以这件事发生了!我不小心点击了“假设不变”!我尝试在互联网上搜索,但找不到任何可行的解决方案!所以,我在这里和那里尝试了一些东西,最后我找到了解决方案(最简单的一个),这将撤销假设不变!

然后右键单击“您的项目” Team > Advanced > No assume Unchanged

图像显示了执行此操作的方法

于 2020-12-05T12:02:14.240 回答