我想运行
git reset *.foo
但这出错了。
我想我需要使用烟斗,但我不知道该怎么做。
谢谢!
答案 0 :(得分:8)
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
git reset HEAD "$i"
git checkout "$i"
done
答案 1 :(得分:6)
如果您使用的是Powershell,则以下方法有效。
gci -re -in *foo | %{ git reset $_ }
答案 2 :(得分:3)
这应该适用于cygwin和unix env
git reset $(git diff --name-only --cached | grep *.foo)
答案 3 :(得分:2)
在像SmartGit这样的Git GUI应用程序中,我会按照模式*.foo
过滤显示的文件,按Ctrl + A选择所有过滤的文件并调用Unstage命令。
答案 4 :(得分:1)
E.g。我希望匹配所有"迁移"在路上。
git diff --name-only | grep迁移| xargs git checkout
答案 5 :(得分:1)
只需使用git reset *mypattern*
编辑:也请尝试git restore,但要非常小心,因为它在撰写本文时似乎已被窃听。
答案 6 :(得分:0)
如果您希望结帐(撤消更改)与给定模式匹配的非暂存修改过的文件,则可以:
MACOS:
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如果您也重命名/删除/冲突的文件。
答案 7 :(得分:0)
使用git diff
方法时,文件名中的空格引起了问题,但以下方法起作用:
find ./ -name "*.foo" -exec git reset {} \;
如果要取消暂存的文件很多,则执行很冗长。