暂存已删除的文件

时间:2012-09-11 16:01:03

标签: git git-add git-rm git-stage

假设我的git repostiory中有一个名为foo的文件。

假设已使用rm(不是git rm)删除了该内容。然后git状态将显示:

Changes not staged for commit:

    deleted: foo

如何暂存此单个文件?

如果我尝试:

git add foo

它说:

'foo' did not match any files.

10 个答案:

答案 0 :(得分:452)

使用git rm foo暂存文件以进行删除。 (这也将删除文件系统中的文件,如果它以前没有被删除。当然,它可以从git中恢复,因为它之前已经签入。)

要暂存文件以进行删除而不将其从文件系统中删除,请使用git rm --cached foo

答案 1 :(得分:367)

你可以git add -u

如果您想要删除多个文件,而不为每个文件执行git rm,这将有所帮助。

答案 2 :(得分:134)

要暂存您可以使用的所有手动删除的文件:

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

要将此命令的别名添加为git rm-deleted,请运行:

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

答案 3 :(得分:30)

添加所有准备好的已删除文件

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

谢谢检查以确保

git status

你应该好好去

答案 4 :(得分:11)

自Git 2.0.0起,git add也将暂存文件删除。

Git 2.0.0 Docs - git-add

  

< pathspec> ...

     

要添加内容的文件。 Fileglobs(例如* .c)可以添加全部>匹配文件。还可以给出一个前导目录名称(例如,添加dir / file1和dir / file2的目录)来更新索引以匹配整个目录的当前状态(例如,指定dir将不仅记录文件dir / file1已修改在工作树中,文件dir / file2已添加到工作树中,但也从工作树中删除了文件dir / file3。请注意,旧版本的Git用于忽略已删除的文件;请使用--no-all如果要添加已修改或新文件但忽略已删除的文件,则选项。

答案 5 :(得分:7)

您可以使用

git rm -r --cached -- "path/to/directory"

暂存已删除的目录。

答案 6 :(得分:3)

您可以使用此命令

git add  `git ls-files --deleted`

答案 7 :(得分:1)

对于在powershell中使用git 2.x +的用户:

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

答案 8 :(得分:1)

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

此语法也与鱼兼容。

答案 9 :(得分:1)

如果您只想将所有已删除的文件添加到 stage,则可以使用 git add .

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

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