使用Git/GitHub删除文件

115

首先声明,我是Git新手。

我在Mac上使用Finder删除了一堆文件。我希望这些被我删除的文件不再出现在当前分支中,但它们仍然存在。

有没有Git用户知道如何更新索引的命令?


参见https://dev59.com/enRB5IYBdhLWcg3w1Kv0 - Petr Gladkikh
4个回答

225

我认为这可能是实现你想要的更简单的方法:

git add . -A 

那么你只需要执行:

git commit -m "removed some files"

如上所述。


谢谢。我刚刚在bash中编写了别名来执行上述操作。太棒了。 - Zack
如果您在相同的“stage”中添加了一个文件,Git 将假定这是一个重命名。对此有什么需要注意的吗?还是应该将它们分别提交? - Koen
1
根据kernel.org的说明,"-A --all与-u类似,但是除了索引之外,还会将<filepattern>与工作树中的文件进行匹配。这意味着它将找到新文件以及暂存修改的内容并删除不再存在于工作树中的文件。" - j08691
3
git help add可以告诉你-A的含义,并列出所有其他开关。 - Marcin Orlowski
1
这个程序不仅会删除已删除的文件,还会添加目录下所有被更改了的文件,所以这并不是一个令人满意的答案。 - Alex

19

你可以使用以下命令查看已删除但仍被“跟踪”的文件:

git ls-files --deleted

要从分支中删除文件,您可以执行以下操作:

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

来自man git-rm:

从索引中删除文件,或者从工作树和索引中删除文件。git-rm不会仅从您的工作目录中移除文件。(没有选项可以仅从工作树中删除文件,但仍在索引中保留它;如果您想这样做,请使用/bin/rm。)

最后,要提交“删除”操作,请执行以下操作:

git commit -m "removed some files"

然后您需要提交更改 - git commit -m“删除了一些文件” - James Polley

17

我不知道自从之前的回答以来,git是否已经添加了这个功能,但我刚刚使用了

git add -u
git commit -m "Removed some files"

为了实现相同的目的。


这适用于列出的用例,但它不仅添加了文件的删除。它添加了所有已更改的文件,因此除非您只进行了删除操作,否则通常不是删除所有已删除文件的好方法。 - Alex

2
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch deletefile.name' --prune-empty --tag-name-filter cat -- --all
git commit -m "Removed deletefile.name"
git push origin master --force

将deletefile.name替换为要删除的文件。如需深入详细解释,请阅读https://help.github.com/articles/remove-sensitive-data中的精彩文章。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接