Git 命令取消暂存所有新文件(按状态取消暂存)
Git command to unstage all new files (unstage by status)
经常在分支之间进行合并操作后,我会在舞台区域中发现几个我不想默认在舞台上拥有的新文件,而是我希望默认情况下取消暂存以检查它们并暂存他们一一审查后。
所以问题是:是否可以自动取消暂存所有新文件?
或更一般地说:是否可以根据状态取消暂存一组文件?
例如,我在暂存区中有以下内容:
A fileA.txt
A fileB.txt
U fileC.txt
我想在单个命令中删除新添加的文件(fileA.txt
和 fileB.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 命令来实现。
经常在分支之间进行合并操作后,我会在舞台区域中发现几个我不想默认在舞台上拥有的新文件,而是我希望默认情况下取消暂存以检查它们并暂存他们一一审查后。
所以问题是:是否可以自动取消暂存所有新文件?
或更一般地说:是否可以根据状态取消暂存一组文件?
例如,我在暂存区中有以下内容:
A fileA.txt
A fileB.txt
U fileC.txt
我想在单个命令中删除新添加的文件(fileA.txt
和 fileB.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 命令来实现。