git 删除系统中不再存在的文件

git remove a file that no longer exists on the system

我以前从未遇到过这个问题,也不知道这怎么可能。我有一个非常大的目录,我错误地将其下载到我的 git 存储库中。我无意中做了一个 git add . 所以大目录被添加到工作树中,当我试图提交时,它不允许我这样做,因为文件太大了。 然后我没有做 git rm 并直接从文件系统中删除了文件。下次我尝试提交时,它不允许我提交,并且仍在抱怨该目录(现在文件系统中不再存在)太大了。

从文件系统中删除文件不会同时从 git 工作树中删除它吗?

如果有办法在不丢失更改的情况下撤消我最近的 2 次提交,然后将其重新推送到远程,那就太好了。

您需要在提交之前将其从索引中删除:

git rm --cached FOLDER_NAME

既然你已经从文件系统中删除了它,那么该文件夹现在应该已经消失了。

如果您在最近的提交中添加了该文件夹,那么您可以简单地发出:

git commit --amend
git push -f REMOTE BRANCH_NAME

如果您在倒数第二个提交中添加了文件夹,事情就会变得有点困难。我建议先备份本地仓库。

按照以下步骤操作:

# Rebase the second most recent commits
# -i will open an editor
git rebase -i HEAD~2

在编辑器中,将倒数第二个提交行中的 pick 替换为 edit 并保存文件。您现在可以更改该提交。问题:

git rm FOLDER_NAME

# This will open an editor again. You can leave the
# commit message unchanged. Simply save the file
git commit --amend

# Finish the rebase action
git rebase --continue

现在您应该完成了,该文件夹已从该提交中删除。您可以使用

推送
git push REMOTE BRANCH_NAME