我有一个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

阶段删除文件删除,但也修改文件更新。

要取消已修改的文件,您可以执行

git reset HEAD <path>

如果你想保持你的提交有条理和干净。注意:这也可能取消已删除的文件,所以要小心那些通配符。

其他回答

类似的

git status | sed -s "s/^.*deleted: //" | xargs git rm 

也许吧。

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

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

然后你要做的就是跑:

git rma

(另一种变化)

我想删除所有已经删除的磁盘文件,但从一个特定的文件夹,留下其他文件夹不变。下面的方法对我很有效:

git ls-files --deleted  | grep <folder-name> | xargs 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别名现在…

如果你简单地运行:

git add -u

Git将更新它的索引,以知道您已经删除的文件实际上应该是下一次提交的一部分。然后你可以运行“git commit”来检入这个更改。

或者,如果你运行:

git commit -a

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

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

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