GIT:我想取消所有匹配特定模式的文件

时间:2010-11-19 18:15:54

标签: git filepattern

我想运行

git reset *.foo

但这出错了。

我想我需要使用烟斗,但我不知道该怎么做。

谢谢!

8 个答案:

答案 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 {} \;

如果要取消暂存的文件很多,则执行很冗长。