在"git 过滤器分支"后无法推送到 Heroku:更新被拒绝,因为当前分支的尖端落后



我昨天清理了我的提交历史,因为有一些私人信息被意外地推送了。清理提交后,我将其强制推送到主分支。在我的电脑和我的仓库里,一切都是一样的。然而,当我尝试推送到Heroku时,我得到了这个错误:

Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g.'git pull ...') before pushing again.

所以我一直在寻找类似的线程,并尝试:

$ git pull origin mastergit pull --rebase origin master

返回:

 * branch            master     -> FETCH_HEAD
Already up-to-date.

我也尝试了git fetch,它返回相同的响应。上面说一切都是最新的,为什么我不能推到heroku?这与我昨天运行的git filter-branch有关吗?我该如何修复它?

Git被设计成这样一种方式,它将防止您覆盖任何已经推送到远程的分支。你的git filter-branch是重写分支历史的许多方法之一(你在问题中直接回答了这部分)。

git push上的--force选项允许您更新远程分支,而不管历史上的任何分歧。

请注意,从技术上讲,你的私人信息不能保证被完全删除。

  1. 它仍然在你的本地存储库中,我们称之为dangling commits
  2. 它仍然在远程的对象上,但不一定被任何分支引用。如果是这种情况,可以放心地假设以后没有克隆或提取会检索这些对象。如果你有命令行访问git服务器,你可能仍然想在那里运行git gc
  3. 如果其他人已经拉出了你的分支,它就在他们的存储库上。你对此无能为力,所以你应该默认认为你的数据被泄露了。

我以前没有见过这个,但我想我应该试一试:

git push --force heroku master

你知道什么?

这样就可以了。

heroku plugins:install heroku-repo
heroku repo:reset -a <yourappname>
git push heroku master

相关内容

最新更新