从先前未推送的提交中删除文件

Remove a file from a previous unpushed commit

我不小心做了一个本地提交,其中包含一个我忘记添加到 .gitignore 的巨大 (~2GB) 文件。此提交还包含对其他文件的重要更改。然后我又做了一些不相关的本地提交。

去push的时候,因为文件大小等问题,最终push失败了,这才发现是我不小心加了那个文件。

是否有某种方法可以返回并从过去的提交中删除该文件(这是 4 次提交之前的提交,整个系列的提交仍未推送),就好像它从未存在过一样?我仍然想保留有问题的提交中的其余更改。

git rebase -i HEAD~5 如果在过去的 5 次提交中没有合并或插入适当的 sha。 Select 提交编辑。修改提交然后修改更改。 git rebase --continue

您可以使用 rebase -i 来完成,但这是一个简单的修复方法,如下所示:

git checkout HEAD~4
git rm --cached the-file
git commit --amend --no-edit
git cherry-pick the-branch~4..the-branch # replay all revisions after the revision we modified
git branch -f the-branch # set branch to new location
git checkout the-branch

应该可以