如何从git repo中删除以前提交的文件?

时间:2016-09-07 08:08:35

标签: git bitbucket

我不小心提交了一个大型zip文件并推送到了bitbucket。

现在,我已将文件添加到.gitignore并使用git rm --cached将其删除并提交删除文件。

但是当我git checkout之前提交时,大型zip文件仍然存在。意思是它仍然在git repo中。

如何完全删除这个大型zip文件?

提前致谢。

2 个答案:

答案 0 :(得分:2)

因为在包含大型二进制文件的提交之上只有一个提交,所以您可以避免使用交互式rebase。

首先,核对你删除大型二进制文件的第二次提交:

git reset --hard HEAD~1

这使您处于刚刚提交大型二进制文件时的状态。

现在,此时大二进制文件应该再次出现在本地。删除此文件,然后将该更改添加到索引中,如果Git尚未为您完成此操作。

最后,通过以下方式修改错误提交:

git commit --amend

要将这个分支推到Bitbucket,你必须强制推动,因为你重写了历史:

git push --force origin feature

请记住强制推送重写远程历史记录,这可能会导致其他任何人共享此分支时出现问题。在你的情况下,这样做的好处可能是超重,因为你的历史中有一个巨大的二进制文件。

答案 1 :(得分:0)

最安全且可能最干净的方法是以交互方式进行变基调。

git rebase -i HEAD^^

或者,

git rebase -i your-commit-no^

从那里你可以压缩提交,这会将一个或多个提交放在上一个提交中。要从历史记录中完全删除提交,请从列表中删除该行。

您可以使用

还原提交
git revert 

但它会向历史记录添加更多提交消息,这可能是不可取的。使用-n参数告诉Git不要立即提交revert。你可以以交互方式进行折扣,然后将这些东西压在上一次提交之前,以保持清洁。

如果你在这里使用的两个提交会影响同一个文件,你可能会看到合并冲突。

使用

重置存储库
git reset --hard 

应该小心,因为它无法撤消。

重写历史应该小心。