已删除没有用git remove命令的文件,现在它在存储库中而不在本地。如何从存储库中删除?

3

我已经在Bitbucket上使用我的仓库有一段时间了,有一些文件是我本地正在使用的。我已经删除了一些文件(只是使用linux中的rm命令),并使用-am“message”进行了提交,然后推送到主分支。

现在当我访问我的仓库时,我看到仓库中存在一些文件,但这些文件在本地不存在。

如何告诉我的Git仓库删除任何本地不存在的文件?


通常情况下,您会先在本地删除文件,然后再推送到远程仓库,而不是反过来。为什么您想要从远程删除这些文件,并且您已经确定它们不重要吗? - Tim Biegeleisen
是的,它们并不重要。我只是在本地删除它们时忘记使用git rm命令。 - LewlSauce
如果您忘记在本地删除它们,那么它们应该会在本地和远程同时出现。我有什么遗漏吗? - Tim Biegeleisen
是的,我忘记在本地删除它们时使用“git rm”。我使用了“rm”来删除它们,显然对存储库没有影响。 - LewlSauce
嗯,好的。我只是在代码库中浏览它时注意到了它。不确定我错过了什么,但我将继续研究。谢谢你的帮助。 - LewlSauce
显示剩余5条评论
4个回答

2
现在我进入我的repo,发现一些文件存在于repo中但本地不存在。
这些文件存储在您的Git仓库中,但它们不是您最近代码(workdir)的一部分。
如果您想要从Git完全删除它们(从历史记录中),则必须清除存储库并将它们删除。
要执行此操作,您可以使用filter-branch或使用this tool

enter image description here


我该如何告诉我的git仓库删除任何本地不存在的文件?
一旦Git跟踪要删除的文件,您首先必须从缓存(索引)中删除它们。
git rm --cached

哪些文件需要删除?您需要列出要删除的文件列表。如果您知道自己的文件,可以手动完成此操作,或者使用脚本生成。


如何获取待删除文件列表?

有几种方法。(format-patchlog等)

以下是一个示例,演示如何查看已提交的文件(git > 2.5)。

git log --cc --stat

enter image description here


1
如果你使用rm命令删除了文件,它们应该会在git status中以Changes not staged for commit:的形式出现,表示已被删除。如果是这样的话,你可以选择使用git rm <file>或者git add <file>,然后进行提交。不用担心,在你的情况下,两种方法的效果是一样的。这将从你的工作目录索引中移除这些文件。
当你使用rm命令删除一个文件时,Git知道它已经从你当前的工作目录中消失了,但它并不停止跟踪这个文件。你必须将这个变化添加到缓存(或暂存区),然后再提交这些变化。git rm的效果与先使用rm删除文件,然后再使用git add添加文件是一样的。如果文件存在于工作目录中,git rm也会将其删除,否则它不会报错。
请注意,这并不会从代码库中删除文件。因此,如果这些文件很敏感(例如私钥或密码),您应该根据此处的说明从所有对象中删除该文件。

有一个和这个问题完全相同的需求,这是一个很好的解决方案,即使在23中也是如此。如果您使用终端进入文件在存储库中显示但本地不存在的位置,它实际上会显示出来,因此一旦我git rm它,提交并推送更改,就可以完美地工作了。 - Blu3

0
那些文件将永远保留在早期版本中,但不应该出现在最新版本中。您只能重新创建代码库。

我甚至不确定自己是否理解它。它会永远留在那里,但不在最后一次修订中?编辑:哦,好的,我明白了。谢谢! - LewlSauce
你的答案是错误的。你也可以从历史记录中删除它。 - CodeWizard

0
提交时使用 -am "message"。
即使您没有执行 git rm,commit -a 也足以捕获那些已删除的文件: git commit man page
告诉命令自动暂存已修改和已删除的文件,但您尚未告诉 Git 的新文件不受影响。
这意味着 git push 已经推送了这些删除。尝试在其他地方克隆您的 repo,以查看这些文件在 HEAD 中不再可见。

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