2016-09-07 124 views
0

我意外地提交了一个大的zip文件并推送到bitbucket。如何从git repo中删除以前提交的文件?

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

但是,当我git checkout以前的提交,大的zip文件仍然存在。这意味着它仍然在git回购中。

我怎样才能完全删除这个大的zip文件?

在此先感谢。

+0

自从包含大二进制文件的提交以来,已向该分支添加了多少个提交?最简单的选择可能是修改该提交,并删除该文件。 –

+0

@TimBiegeleisen只有一个。第二次提交添加了大文件。最后一次提交删除大文件。 –

+0

@TimBiegeleisen嗯..如何修改?通过使用'git revert'? –

回答

2

因为在包含大二进制文件的提交之前只有一个提交,所以您可能可以避免交互式重定位。

首先,核弹的第二次提交所做取出大型二进制文件:

git reset --hard HEAD~1 

这使你在完全相同的状态你是当你刚刚犯了大的二进制文件。

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

最后,修改坏提交经:

git commit --amend 

为推动这个分支才能到位桶,你将不得不力推因为你改写了历史:

git push --force origin feature 

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

+0

如果你的核心提交只添加了大的二进制文件,这看起来好极了。如果它还做了其他任何事情'git reset --hard HEAD〜1'会失去它。如果没有'--hard','git reset HEAD〜1'会更安全吗? – dumbledad

+0

是@dumbledad其他文件与大二进制文件一起提交 –

+1

@dumbledad提交我建议nuking只删除大二进制文件AFAIK,所以没有真正的工作会丢失。然后,在从文件系统中删除二进制文件后,剩下的提交文件将被_amended_。 –

0

最安全和可能最干净的方法是交互重新分配。

git rebase -i HEAD^^ 

或者,

git rebase -i your-commit-no^ 

从那里你可以壁球承诺,这使一个或多个一起提交到上一次提交。要从历史记录中完全删除提交,请从列表中删除该行。

您可以还原与

git revert 

但它要增加更多的提交信息的历史,这可能是不可取的提交。使用-n参数告诉Git不要立即提交恢复。您可以交互重新组合,并将它们压缩到之前的提交以保持干净。

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

重置存储库

git reset --hard 

应特别小心,因为它不能被撤销。

重写历史记录应小心谨慎。

+0

即使在交互式底座中,他仍然可能会删除HEAD提交。 –

+0

'git revert'使历史中的提交(和大文件)保持不变。 – Melebius

相关问题