我有一个Git repo,我用rm(不是Git rm)删除了四个文件,我的Git状态是这样的:

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

我如何从Git中删除这些文件,而不需要手动查看并添加每个文件,就像这样:

git rm file1 file2 file3 file4

理想情况下,我正在寻找与git添加的方式相同的东西。是的,如果可能的话。


当前回答

告诉命令自动生成已修改和删除的文件,但未通知Git的新文件不受影响:

——一个 ——所有

git add . && git commit -m -a "Your commit"

or

git add --all && git commit -m "Your commit"

其他回答

你可能在找-A:

git add -A

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

你可以使用

git add -u

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

git commit -m "Deleted files manually"

如果你想把它添加到你的.gitconfig中,这样做:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

然后你要做的就是跑:

git rma

通过使用带有“——all”或“——update”选项的git-add,你可能会得到比你想要的更多的东西。新的和/或修改的文件也会被添加到索引中。我有一个bash别名设置,当我想从git中删除已删除的文件而不接触其他文件:

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

从文件系统中删除的所有文件都作为已删除文件添加到索引中。

git-add的任何标志都不会只执行已删除的文件;如果所修改的都是已删除的文件,那么就没问题,但除此之外,还需要运行git-status并解析输出。

根据杰里米的回答,我得出了以下结论:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm

获取文件的状态。 对于已删除的文件,请隔离文件名。 删除所有以#s开头的行,以及包含“deleted”字样的状态行;我不记得具体是什么了,现在已经不存在了,所以你可能需要根据不同的情况修改这个。我认为表达式分组可能是特定于gnu的特性,因此如果不使用gnutils,则可能必须添加多个grep -v行。 将文件传递给git rm。

把这个放在一个shell别名现在…