2010-11-19 108 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,如果你已經重命名/刪除/衝突的文件。