在'git filter-branch`之后无法推送到Heroku:更新被拒绝,因为当前分支的提示落后了

时间:2015-09-07 19:24:45

标签: git heroku github

我昨天清理了我的提交历史,因为有一些私人信息被意外推送。清理完提交后,我强行推送到我的主分支。在我的电脑和我的回购中,一切都是一样的。但是,当我尝试推送到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有什么关系,我该如何解决?

3 个答案:

答案 0 :(得分:5)

Git的设计方式可以防止您覆盖已经推送到遥控器的任何分支。你的git filter-branch是重写分支历史的众多方法之一(你在问题中直接得到了这一部分)。

--force上的git push选项可让您更新远程分支,无论历史记录是否存在任何差异。

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

  1. 它仍在您的本地存储库中,我们称之为dangling commits
  2. 它仍然在遥控器上的对象上,但不一定被任何分支引用。如果是这种情况,可以安全地假设将来没有克隆或提取将检索这些对象。如果您对git服务器有命令行访问权限,那么您可能仍希望在那里运行git gc
  3. 如果他们已经拉了你的分支,它就在其他人的存储库中。关于此,您无能为力,因此默认情况下您应该考虑将数据泄露。

答案 1 :(得分:1)

我之前没见过这个,但我想我会试一试:

git push --force heroku master

你知道什么?它起作用了:))

答案 2 :(得分:0)

为此有效。

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