如何从 git 仓库中删除之前提交的文件?
how to remove previously committed file from git repo?
我不小心提交了一个大的 zip 文件并推送到 bitbucket。
现在,我已经将文件添加到 .gitignore
并使用 git rm --cached
删除它并提交删除文件。
但是当我 git checkout
上次提交时,大型 zip 文件仍然存在。这意味着它仍在 git 仓库中。
我怎样才能完全删除这个大 zip 文件?
提前致谢。
因为在包含大型二进制文件的提交之上只有一个提交,所以您可以避免交互式变基。
首先,核对您删除大型二进制文件的第二个提交:
git reset --hard HEAD~1
这使您完全处于刚刚提交大型二进制文件时的状态。
现在,此时大型二进制文件应该再次出现在本地。删除此文件,如果 Git 尚未为您完成此操作,则将此更改添加到索引中。
最后,修改错误的提交:
git commit --amend
要将此分支推送到 Bitbucket,您必须强制推送,因为您重写了历史记录:
git push --force origin feature
请记住,强制推送 重写 远程历史记录,这可能会给共享此分支的任何其他人带来问题。在你的情况下,这样做的好处可能超过将一个巨大的二进制文件作为你历史的一部分。
最安全也可能是最干净的方法是交互式变基。
git rebase -i HEAD^^
或者,
git rebase -i your-commit-no^
从那里您可以压缩提交,这会将一个或多个提交放在前一个提交中。要从历史记录中完全删除提交,请从列表中删除该行。
您可以使用
恢复提交
git revert
但它会向历史记录添加更多提交消息,这可能是不受欢迎的。使用 -n 参数告诉 Git 不要立即提交还原。您可以交互地变基并将那些压缩到以前的提交以保持干净。
如果您在此处处理的两个提交影响相同的文件,您可能会看到合并冲突。
使用
重置存储库
git reset --hard
应该小心完成,因为它无法撤消。
改写历史需谨慎。
我不小心提交了一个大的 zip 文件并推送到 bitbucket。
现在,我已经将文件添加到 .gitignore
并使用 git rm --cached
删除它并提交删除文件。
但是当我 git checkout
上次提交时,大型 zip 文件仍然存在。这意味着它仍在 git 仓库中。
我怎样才能完全删除这个大 zip 文件?
提前致谢。
因为在包含大型二进制文件的提交之上只有一个提交,所以您可以避免交互式变基。
首先,核对您删除大型二进制文件的第二个提交:
git reset --hard HEAD~1
这使您完全处于刚刚提交大型二进制文件时的状态。
现在,此时大型二进制文件应该再次出现在本地。删除此文件,如果 Git 尚未为您完成此操作,则将此更改添加到索引中。
最后,修改错误的提交:
git commit --amend
要将此分支推送到 Bitbucket,您必须强制推送,因为您重写了历史记录:
git push --force origin feature
请记住,强制推送 重写 远程历史记录,这可能会给共享此分支的任何其他人带来问题。在你的情况下,这样做的好处可能超过将一个巨大的二进制文件作为你历史的一部分。
最安全也可能是最干净的方法是交互式变基。
git rebase -i HEAD^^
或者,
git rebase -i your-commit-no^
从那里您可以压缩提交,这会将一个或多个提交放在前一个提交中。要从历史记录中完全删除提交,请从列表中删除该行。
您可以使用
恢复提交git revert
但它会向历史记录添加更多提交消息,这可能是不受欢迎的。使用 -n 参数告诉 Git 不要立即提交还原。您可以交互地变基并将那些压缩到以前的提交以保持干净。
如果您在此处处理的两个提交影响相同的文件,您可能会看到合并冲突。
使用
重置存储库git reset --hard
应该小心完成,因为它无法撤消。
改写历史需谨慎。