2010-11-19 109 views
7

的文件,我想运行GIT:我想unstage匹配特定模式

git reset *.foo 

但这样的错误了。

我想我需要使用管道,但我不知道如何做到这一点。

谢谢!

+0

注意:这些文件已被删除。即文件不再在我的工作目录中。所以我想我需要类似git checkout * .foo – Jacko 2010-11-19 18:26:54

回答

7
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do 
    git reset HEAD "$i" 
    git checkout "$i" 
done 
+0

谢谢。现在,阶段性的变化是删除这些文件。所以,这仍然工作?该文件实际上已经在 – Jacko 2010-11-19 18:23:02

+0

目录中被删除,否则不起作用。我会用新的命令更新我的答案。 – cdhowie 2010-11-19 18:25:29

+0

答复已更新。 – cdhowie 2010-11-19 18:33:34

6

如果您使用的是Powershell,以下操作将起作用。

gci -re -in *foo | %{ git reset $_ } 
2

在像SmartGit我将由图案*.foo过滤所显示的文件一GIT中的GUI应用程序,按下Ctrl + A选择所有已过滤的文件并调用Unstage命令。

2

这应该在Cygwin和UNIX ENV

git reset $(git diff --name-only --cached | grep *.foo) 
1

例如工作我想匹配路径中的所有“迁移”。

git diff --name-only | grep migrations | xargs的git的结帐

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,如果你已经重命名/删除/冲突的文件。