已删除的文件

假设我在git存储库中有一个名为foo的文件。

假设已经用rm(而不是git rm)删除了它。然后git的状态会显示:

Changes not staged for commit:


deleted: foo

我如何进行这个单独的文件删除?

如果我试着:

git add foo

它说:

'foo' did not match any files.

更新(9年后,哈哈):

看起来git 2.x已经修复了这个问题:

$ git --version
git version 2.25.1


$ mkdir repo


$ cd repo


$ git init .
Initialized empty Git repository in repo/.git/


$ touch foo bar baz


$ git add foo bar baz


$ git commit -m "initial commit"
[master (root-commit) 79c736b] initial commit
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
create mode 100644 baz
create mode 100644 foo


$ rm foo


$ git status
On branch master
Changes not staged for commit:
deleted: foo


$ git add foo


$ git status
On branch master
Changes to be committed:
deleted:    foo
356141 次浏览

使用git rm foo来执行删除文件。(这也会从文件系统中删除文件,如果它之前没有被删除的话。当然,它可以从git中恢复,因为它是之前检入的。)

要在不从文件系统中删除文件的情况下执行删除文件,请使用git rm --cached foo

尽管使用git rm [FILE]是正确的,但是您也可以使用git add -u

根据git-add文档:

< p > - u ——更新< / p >

更新索引,只在它已经有一个匹配[FILE]的条目的地方。这将删除和修改索引项以匹配

.工作树,但没有添加新的文件

如果使用-u选项时没有[FILE],则整个工作树中所有跟踪的文件都将被更新(使用旧版本的Git) 将更新限制到当前目录及其子目录)

在此基础上,索引将被刷新,文件将被正确地暂存。

你可以使用

# EYZ0

执行已删除的目录。

添加所有已删除的文件

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

谢谢确认

git status

你应该可以出发了

要执行所有手动删除的文件,您可以使用:

git rm $(git ls-files --deleted)

要为这个命令添加一个别名,如git rm-deleted,运行:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

从Git 2.0.0开始,git add也会执行文件删除。

Git 2.0.0 Docs - Git -add

& lt;pathspec祝辞……

要添加内容的文件。可以给fileglob(例如*.c)来添加所有 匹配的文件。此外,还可以指定一个主目录名(例如dir用于添加dir/file1和dir/file2)来更新索引以匹配整个目录的当前状态(例如,指定dir不仅会记录在工作树中修改的文件dir/file1,将文件dir/file2添加到工作树中,还将记录从工作树中删除的文件dir/file3。# EYZ0 < / p >

您可以使用该命令

git add `git ls-files --deleted`

解释:

git ls-files --deleted -该命令将返回所有已删除文件的文件名。

对于使用git 2的用户。powershell中的X +:

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }

Ian Mackinnon找到了答案,但是用xargs更好:

git ls-files --deleted -z | xargs -r0 git rm

作为git的别名:

git config --global alias.rm-deleted '!git ls-files --deleted -z | xargs -r0 git rm'

这使用带有NUL终止的xargs(唯一保证不出现在路径中的字节),如果文件列表为空,则不运行git rm选项。

这个语法也是fish兼容的。

如果您想简单地将所有删除的文件添加到舞台,那么您可以使用git add .

这是目前使用git# EYZ0最简单的方法。注意,使用*.是不同的方法。使用git add *只会添加当前存在的文件,而git add .也会显示使用rm命令删除的文件。

很明显,但值得一提的是,当您使用git add .时,其他已修改的文件也将添加到暂存区域。