从 Git 存储库中删除多个已从磁盘删除的文件

我有一个 Git 存储库,使用rm不是 git rm )删除了四个文件,我的 Git 状态如下:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

如何从 Git 中删除这些文件,而无需手动检查并添加每个文件,如下所示:

git rm file1 file2 file3 file4

理想情况下,我正在寻找与git add .相同的方式工作git add .如果可能的话。

答案

对于 Git 1.x

$ git add -u

这告诉 git 自动暂存跟踪的文件 - 包括删除以前跟踪的文件。

对于 Git 2.0

整理整个工作树:

$ git add -u :/

要暂存当前路径:

$ git add -u .
git ls-files --deleted -z | xargs -0 git rm

可能就是您想要的.. 它对我有用..

您可以使用

git add -u

要将删除的文件添加到暂存区,然后提交它们

git commit -m "Deleted files manually"

如果您只是运行:

git add -u

git 将更新其索引,以知道您删除的文件实际上应该是下一次提交的一部分。然后,您可以运行 “git commit” 以签入该更改。

或者,如果您运行:

git commit -a

它将自动进行这些更改(以及任何其他更改)并提交。

更新 :如果只想添加已删除的文件,请尝试:

git ls-files --deleted -z | xargs -0 git rm
git commit

您可能正在寻找 - A:

git add -A

这类似于 git add -u,但也添加了新文件。这大致等同于 hg 的addremove命令(尽管移动检测是自动的)。

仅暂存已删除的文件:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

或(xargs 方式):

git status | awk '/deleted/ {print $2}' | xargs git rm

您可以为首选命令集添加别名,以方便以后使用。

git rm test.txt

在删除实际文件之前或之后。

通过将 git-add 与 '--all' 或 '--update' 选项一起使用,您可以获得的收益超出了预期。新的和 / 或修改的文件也将添加到索引中。当我想从 git 中删除已删除的文件而不触摸其他文件时,我有一个 bash 别名设置:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

从文件系统中删除的所有文件都将被删除后添加到索引中。

并不是真的很重要,但是我不同意选择的答案:

git add -u

如果工作树中的相应文件已被删除,则... 将从索引中删除文件,但是它还将上载跟踪文件的修改后的新内容。

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

... 另一方面,只会删除已跟踪的已删除文件。

因此,我认为后者是更好的选择。

如果只有这些更改,则只需执行

git commit -a

提交所有更改。这将包括已删除的文件。