撤消git update-index --assume-unchanged <file> </file>

时间:2013-06-19 15:57:09

标签: git version-control git-index

你Git忽略观看/跟踪特定目录/文件的方式。你只需运行:

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

现在你如何撤消它以便再次观看? (我们称之为取消。)

12 个答案:

答案 0 :(得分:509)

要设置为假设未更改的撤消/显示目录/文件,请运行

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

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

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

答案 1 :(得分:83)

如果这是您经常使用的命令 - 您可能也想考虑为它添加别名。添加到您的全球.gitconfig

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

将此保存到.gitconfig后,您可以运行更清洁的命令。

git hide myfile.ext

git unhide myfile.ext

resource非常有帮助

答案 2 :(得分:37)

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>

答案 3 :(得分:35)

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

答案 4 :(得分:16)

综合@adardesign,@ adswebwork和@AnkitVishwakarma的优秀原创答案,以及@Bdoserror,@ Retsam和@seanf的评论,以及其他文档链接和简洁的别名......

基本命令

reset a file assume-unchanged恢复正常:

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

假设未更改的list all个文件:

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

reset all假设未更改的文件恢复正常:

git update-index --really-refresh

<强>快捷方式

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

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = update-index --really-refresh
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-

答案 5 :(得分:15)

如果要撤消所有已应用的文件,假定其状态不变,不仅缓存(git以小写字母标记它们),您可以使用以下命令:

git ls-files -v
  1. grep '^[a-z]'将打印状态为
  2. 的所有文件
  3. cut -c 3-将过滤文件并选择仅假设未更改
  4. tr '\012' '\000'将删除状态并仅留下路径,从第3个字符切换到最后
  5. xargs -0 git update-index --no-assume-unchanged会将行尾字符(\ 012)替换为零字符(\ 000)
  6. git update-index --no-assume-unchanged会将所有以零字符分隔的路径传递给{{1}}以撤消

答案 6 :(得分:11)

添加到@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的两个字符输出,即"h ",然后转义文件名中可能存在的任何空格,最后|| true将阻止命令过早终止,以防某些循环中的文件有错误。

答案 7 :(得分:2)

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

  1. 转到提交窗口。
  2. 点击名为工作目录更改的下拉列表。
  3. 选择显示已确认的未更改文件选项。
  4. 右键单击要取消的文件。
  5. 选择不要保持不变
  6. 你已经完成了。

答案 8 :(得分:0)

这里没有什么没有涵盖的。但是想加我的2美分。有时,我运行一个构建,它会更改很多文件,然后我想处理某些东西,因此此命令确实对我有很大帮助。

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

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

答案 9 :(得分:0)

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

Windows解决方案

  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'再次列出所有未缓存的文件,并检查以上命令是否有效-现在应该不返回任何内容

答案 10 :(得分:0)

所以这发生了! 我不小心点击了“假设不变”! 我尝试在Internet上搜索,但找不到任何有效的解决方案! 因此,我在这里到那里尝试了很少的事情,最后我找到了解决方案(最简单的方法),它将使假设不变!

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

Image shows the way to do it

答案 11 :(得分:-4)

如果您使用的是eclipse,则可能会发现以下有用的信息:

no assume unchanged with eclipse