Git 命令取消暂存所有新文件(按状态取消暂存)

Git command to unstage all new files (unstage by status)

经常在分支之间进行合并操作后,我会在舞台区域中发现几个我不想默认在舞台上拥有的新文件,而是我希望默认情况下取消暂存以检查它们并暂存他们一一审查后。

所以问题是:是否可以自动取消暂存所有新文件?

或更一般地说:是否可以根据状态取消暂存一组文件?

例如,我在暂存区中有以下内容:

A   fileA.txt
A   fileB.txt
U   fileC.txt

我想在单个命令中删除新添加的文件(fileA.txtfileB.txt),而不是手动对每个文件执行 git 重置:

git reset HEAD fileA.txt
git reset HEAD fileB.txt

解决问题的最佳方法是什么?

由于我在网络上搜索失败,因此我使用 git bash shell 中的以下串联命令集创建了一个 git 别名:

git diff --name-status --cached | grep ^A | sed 's/^A[[:space:]]//g' | xargs -I {} git reset HEAD {}

别名(unstagenew)定义如下:

[alias]
    unstagenew = "!sh -c 'git diff --name-status --cached | grep ^A | sed 's/^A[[:space:]]//g' | xargs -I {} git reset HEAD {}'"

要适应其他状态,只需将正则表达式:^A 替换为:^M^D^U ...

虽然为了避免繁琐的输出,但在命令末尾放置 > /dev/null .

我希望将来它将作为重置命令的一个选项或作为一个新的内置 git 命令来实现。