我有一个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 add -u <filenames>来只执行已删除的文件。

例如,如果您删除了文件模板/*。然后使用git添加-u templates/*. Tpl。

需要使用-u来引用存在于存储库中但不再存在于工作目录中的文件。否则,git add的默认设置是在工作目录中查找文件,如果您指定已删除的文件,它将无法找到它们。

其他回答

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别名现在…

如果只有这些变化,您可以简单地这样做

git commit -a

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

git ls-files --deleted | xargs git rm 

是只添加已删除文件的最佳选项。

这里有一些其他的选择。

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.

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

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

然后你要做的就是跑:

git rma

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

——一个 ——所有

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

or

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