我想跑步
git reset *.foo
但这会出错。
我想我需要使用管道,但我不知道该怎么做。
谢谢!
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
git reset HEAD "$i"
git checkout "$i"
done
如果您使用的是 Powershell,则以下内容将起作用。
gci -re -in *foo | %{ git reset $_ }
这应该适用于 cygwin 和 unix env
git reset $(git diff --name-only --cached | grep *.foo)
在像SmartGit这样的 Git GUI 应用程序中,我将按模式过滤显示的文件*.foo
,按 Ctrl+A 选择所有过滤后的文件并调用 Unstage 命令。
只需使用git reset *mypattern*
编辑:也尝试git restore,但要非常小心,因为它在撰写本文时似乎被窃听了。
例如,我想匹配路径中的所有“迁移”。
git diff --name-only | grep 迁移 | xargs git 结帐
文件名中的空格导致使用这些git diff
方法出现问题,但以下方法有效:
find ./ -name "*.foo" -exec git reset {} \;
如果要取消暂存的文件很多,则执行会很冗长。
您可以尝试使用恢复文件git restore '*.foo'
现在git restore
完美无缺,因此对我来说最简单的是:
git restore '*.foo'
就像@César Noreña 的回答一样。
但是,另一种非常简单且非常灵活的方法是:
git diff --name-only --relative | grep '.foo' | xargs git restore
它很灵活,因为您可以使用所有grep
选项,甚至可以替换grep
为其他选项。
如果您想签出(撤消更改)匹配给定模式的未暂存修改文件,则可以使用:
苹果系统:
git checkout $(git st -s | sed -E 's/^.{2}//' | grep '\.foo$')
Unix:
git checkout $(git st -s | sed -r 's/^.{2}//' | grep '\.foo$')
我只用M
修改过的文件对此进行了测试。如果您还重命名/删除/冲突文件,则为 YMMV。