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

时间:2019-07-19 18:02:45

标签: git language-agnostic git-commit git-push

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

当我进行推送时,由于文件大小和相关问题,推送最终失败了,直到那时我才意识到我不小心添加了该文件。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以使用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

那应该做