我意外地提交了一个大的zip文件并推送到bitbucket。如何从git repo中删除以前提交的文件?
现在,我已将该文件添加到.gitignore
并使用git rm --cached
删除它并提交删除该文件。
但是,当我git checkout
以前的提交,大的zip文件仍然存在。这意味着它仍然在git回购中。
我怎样才能完全删除这个大的zip文件?
在此先感谢。
我意外地提交了一个大的zip文件并推送到bitbucket。如何从git repo中删除以前提交的文件?
现在,我已将该文件添加到.gitignore
并使用git rm --cached
删除它并提交删除该文件。
但是,当我git checkout
以前的提交,大的zip文件仍然存在。这意味着它仍然在git回购中。
我怎样才能完全删除这个大的zip文件?
在此先感谢。
因为在包含大二进制文件的提交之前只有一个提交,所以您可能可以避免交互式重定位。
首先,核弹的第二次提交所做取出大型二进制文件:
git reset --hard HEAD~1
这使你在完全相同的状态你是当你刚刚犯了大的二进制文件。
现在,在这一点上,大的二进制文件应该再次出现在本地。删除此文件,然后将该更改添加到索引,如果Git尚未为您完成。
最后,修改坏提交经:
git commit --amend
为推动这个分支才能到位桶,你将不得不力推因为你改写了历史:
git push --force origin feature
记住,强制推送重写远程历史记录,这可能会导致共享该分支的任何其他人遇到问题。在你的情况下,做这可能是超重的好处,有一个巨大的二进制文件是你的历史的一部分。
如果你的核心提交只添加了大的二进制文件,这看起来好极了。如果它还做了其他任何事情'git reset --hard HEAD〜1'会失去它。如果没有'--hard','git reset HEAD〜1'会更安全吗? – dumbledad
是@dumbledad其他文件与大二进制文件一起提交 –
@dumbledad提交我建议nuking只删除大二进制文件AFAIK,所以没有真正的工作会丢失。然后,在从文件系统中删除二进制文件后,剩下的提交文件将被_amended_。 –
最安全和可能最干净的方法是交互重新分配。
git rebase -i HEAD^^
或者,
git rebase -i your-commit-no^
从那里你可以壁球承诺,这使一个或多个一起提交到上一次提交。要从历史记录中完全删除提交,请从列表中删除该行。
您可以还原与
git revert
但它要增加更多的提交信息的历史,这可能是不可取的提交。使用-n参数告诉Git不要立即提交恢复。您可以交互重新组合,并将它们压缩到之前的提交以保持干净。
如果您在这里使用的两个提交会影响相同的文件,您可能会看到合并冲突。
重置存储库
git reset --hard
应特别小心,因为它不能被撤销。
重写历史记录应小心谨慎。
即使在交互式底座中,他仍然可能会删除HEAD提交。 –
'git revert'使历史中的提交(和大文件)保持不变。 – Melebius
自从包含大二进制文件的提交以来,已向该分支添加了多少个提交?最简单的选择可能是修改该提交,并删除该文件。 –
@TimBiegeleisen只有一个。第二次提交添加了大文件。最后一次提交删除大文件。 –
@TimBiegeleisen嗯..如何修改?通过使用'git revert'? –