35

情况如下:

我们有一些项目保留在 Github 上,并将其部署到 Heroku,它有自己的 mini-Git。一些更改直接应用于 Heroku(从 Heroku 克隆存储库,进行更改并推送)。与此同时,Github 上的 master 分支也发生了一些变化。

现在,当我想将主存储库推送到 Heroku 时,推送失败是因为 Heroku 上的提交与本地提交不同步。

我不想与 Heroku 上的更改合并——我只想让它们消失。

有没有办法清理 Heroku 上的 git 存储库,然后从一开始就推送我的本地存储库?

我不想破坏应用程序并重新创建它,因为它有一些付费服务,而我只是一个合作者。

4

5 回答 5

59

安装Heroku Repo 插件并使用它来重置远程 git repo。

首先删除服务器上的git repo:

> cd /my-project/
> heroku plugins:install heroku-repo
> heroku repo:reset

然后通过删除并重新创建本地 git 存储库来重新初始化它:

> cd /my-project/
> rm -rf .git
> git init
> heroku git:remote -a <appname>

<appname>你的应用程序在heroku中的名称在哪里。

2 个存储库(本地和远程)现在应该是空的并且是同步的。

于 2016-06-20T14:59:21.883 回答
56

您可以只使用 git 中的-f标志(它是标准的 git 标志)来强制推送。请参阅 Dev Center Git文档中的附注。这显然会覆盖您在 Heroku 上所做的更改。

于 2012-05-04T16:46:32.687 回答
6

尝试访问https://github.com/heroku/heroku-repo并使用该插件远程清理内容。

于 2015-02-06T17:42:00.090 回答
4

如果你的 Heroku 推送失败是因为它不是一个快进提交,并且你没有尝试对你的历史做任何时髦的事情,这很简单:

  1. 确保将您的非 Heroku 存储库定义为远程存储库。
  2. 获取所有遥控器。
  3. 使用带有“他们的”策略选项的递归策略将您的其他存储库合并到本地 Heroku 克隆中。

    git merge -X theirs remotes/origin/master
    
  4. 推送--force选项以对上游 Heroku 存储库进行非快进提交。

另一方面,如果您真的想清除历史记录,您还有其他选择。

  • 从您的历史记录中删除除第一次提交之外的所有提交(最简单)。

    git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1)
    git push --force
    
  • 创建一个空的 master 分支
  • 使用git-filter-branch

就个人而言,我建议保留您的历史记录并修复快进问题作为最佳实践,但如果您想积极修改您的历史记录,您当然可以选择。Git 在这方面非常灵活。

于 2012-05-04T16:32:00.890 回答
2

您也可以简单地使用 heroku 的应用程序版本控制系统。转到“活动”,您将获得项目的完整历史记录:回滚到第一个活动,并且应该完全清理存储库,回到最初在 Heroku 上创建应用程序时的状态。

于 2014-08-15T09:14:30.830 回答