Git中取消暂存所有已删除的文件

9

我想取消所有文件删除操作的暂存状态,有简单的方法吗?

我希望将此应用于所有删除操作的文件模式。

4个回答

30
< p >执行git status --porcelain的输出是构建一行命令和脚本的好方法,用于执行此类任务:
git status --porcelain | awk '$1 == "D" {print $2}' | xargs git reset HEAD

1
@Jacko:绝对是很方便的工具。你也可以用sed轻松地完成这个任务:sed -n '/^D /s/^D //p - Cascabel
我的上一个评论缺少闭合单引号。 - Cascabel
1
旧帖子,但值得注意的是,在git状态中用引号括起来的文件会导致答案失效。 - Mike S
2
警告:如果您不在存储库的主文件夹中(即,如果您在子文件夹中尝试此操作,则会静默失败),则此方法无法正常工作(因为git status --porcelain返回相对于主文件夹的路径)。 - BlueCoder

3
如果从git status返回的路径/文件名包含空格,则可以修改对awk的调用以包括整个(带引号的)路径/文件名,包括空格:
git status --porcelain|awk '$1 == "D" {print substr($0, index($0,$2))}'|xargs git reset HEAD

1

万一其他人也使用 PowerShell 进行 git 操作,这里是 @jefromi 出色答案的 PowerShell 版本:

git status --porcelain | where { $_.StartsWith(" D") } | foreach-object { git reset HEAD $_.replace(" D ", "") }

提醒一下,在我的Win10 PowerShell上,使用git 2.35时,“git status --porcelain”列出的已删除文件以“D ”开头而不是“ D”,因此您的StartsWith过滤了所有内容。使用StartsWith(“D ”)和replace(“D ”,“”)可以解决这个问题。 - BrandonL

-1

链接现在似乎跳转到一个有趣的地方,但这本书很有帮助。 - hiwaylon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接