11

我想跑步

git reset *.foo

但这会出错。

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

谢谢!

4

10 回答 10

9
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
    git reset HEAD "$i"
    git checkout "$i"
done
于 2010-11-19T18:18:49.343 回答
6

如果您使用的是 Powershell,则以下内容将起作用。

gci -re -in *foo | %{ git reset $_ } 
于 2010-11-19T18:19:39.760 回答
5

这应该适用于 cygwin 和 unix env

git reset $(git diff --name-only --cached | grep *.foo)
于 2013-04-29T09:37:36.833 回答
2

在像SmartGit这样的 Git GUI 应用程序中,我将按模式过滤显示的文件*.foo,按 Ctrl+A 选择所有过滤后的文件并调用 Unstage 命令。

于 2010-11-19T18:23:32.420 回答
2

只需使用git reset *mypattern*

编辑:也尝试git restore,但要非常小心,因为它在撰写本文时似乎被窃听了。

于 2019-08-28T14:15:29.403 回答
1

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

git diff --name-only | grep 迁移 | xargs git 结帐

于 2014-06-28T08:01:03.643 回答
1

文件名中的空格导致使用这些git diff方法出现问题,但以下方法有效:

find ./ -name "*.foo" -exec git reset {} \;

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

于 2019-07-17T14:50:57.153 回答
1

您可以尝试使用恢复文件git restore '*.foo'

于 2021-10-19T19:55:25.543 回答
1

现在git restore完美无缺,因此对我来说最简单的是:

git restore '*.foo'

就像@César Noreña 的回答一样。

但是,另一种非常简单且非常灵活的方法是:

git diff --name-only --relative | grep '.foo' | xargs git restore

它很灵活,因为您可以使用所有grep选项,甚至可以替换grep为其他选项。

于 2021-11-10T15:39:59.040 回答
0

如果您想出(撤消更改)匹配给定模式的未暂存修改文件,则可以使用:

苹果系统:

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。

于 2018-01-11T16:38:58.460 回答