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

ada*_*ign 426 git version-control git-index

你Git忽略观察/跟踪特定目录/文件的方式.你刚刚运行这个:

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

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

ada*_*ign 542

要获取设置为假定未更改的undo/show目录/文件,请执行以下操作:

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

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

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

  • 如果您不再知道文件,您可以"假设 - 未更改",只需使用`git update-index --really-refresh`即可.使用该命令,您不需要首先使用`git ls-files`查找文件. (8认同)
  • 另一个有用的技巧是`git ls-files -v | grep'^ h'| cut -c3-`,它只给你文件名,没有"h"前缀. (7认同)
  • 你的grep语句略有改进,它可以使用'^ [az]'来捕获所有被忽略的文件,因为第一个字母标签可能是除'H'/'h'之外的字母.来自http://git-scm.com/docs/git-ls-files:此选项在每行的开头标识带有以下标记(后跟空格)的文件状态:H :: cached S :: skip -worktree M :: unmerged R ::删除/删除C :: modified/changed K :: to be??:: other (6认同)
  • 值得一提的是,如果您使用了 `--skip-worktree`,撤消/恢复的过程非常相似:使用 `git ls-files -v|grep '^S'` 列出文件并使用 `git update- 恢复索引 --no-skip-worktree &lt;文件&gt;`。 (4认同)

ads*_*ork 90

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

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
Run Code Online (Sandbox Code Playgroud)

将此保存到您的后.gitconfig,您可以运行更干净的命令.

git config --configLocation alias.aliasName 'command --options'
Run Code Online (Sandbox Code Playgroud)

要么

git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Run Code Online (Sandbox Code Playgroud)

这个资源非常有用

  • 这个别名也很方便:`hidden =!git ls文件-v | grep'^ h'| 切-c3- (2认同)

Ank*_*rma 41

git update-index函数有几个选项你可以找到如下键入:

git update-index --help
Run Code Online (Sandbox Code Playgroud)

在这里,您将找到各种选项 - 如何使用函数update-index处理.

[如果你不知道文件名]

git update-index --really-refresh 
Run Code Online (Sandbox Code Playgroud)

[如果你知道文件名]

git update-index --no-assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

将还原所有已在忽略列表中添加的文件.

git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)


hob*_*bbs 37

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


Wil*_*ain 25

从@adardesign,@ adswebwork和@AnkitVishwakarma以及@Bdoserror和@Retsam的评论中综合出优秀的原始答案,附加文档链接和shell别名......

基本命令

重置文件假设未发生变化恢复正常:

git update-index --no-assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

列出所有那些假设未发生变化的文件:

git ls-files -v | grep '^[a-z]' | cut -c3-
Run Code Online (Sandbox Code Playgroud)

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

git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Run Code Online (Sandbox Code Playgroud)

快捷键

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

git update-index --really-refresh
Run Code Online (Sandbox Code Playgroud)

为了便于执行列出在支持别名的shell (例如bash)中假定未更改的所有文件,请创建一个别名,例如:

[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 update-index --no-assume-unchanged --
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
Run Code Online (Sandbox Code Playgroud)

对于没有别名的shell,脚本可以做到这一点.


C0D*_*F52 17

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

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
Run Code Online (Sandbox Code Playgroud)
  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给undo


sag*_*nms 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
Run Code Online (Sandbox Code Playgroud)

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


Shi*_*pta 5

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

  1. 转到提交窗口。
  2. 单击名为“工作目录更改”的下拉列表。
  3. 选择显示假定未更改的文件选项。
  4. 右键单击要取消解析的文件。
  5. 选择不假设不变

你完成了。