在Heroku上清理git repo

时间:2012-05-04 14:59:46

标签: git heroku repository reset

情况如下:

我们有一些项目在Github上持续存在,并将其部署到Heroku,后者拥有自己的mini-Git。一些更改直接应用于Heroku(来自Heroku的克隆存储库,进行了更改并推送)。与此同时,Github上的主分支也获得了一些变化。

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

我不想与Heroku上的更改合并 - 我只是希望它们消失。

有没有办法在Heroku上清理git仓库,从一开始就推送我的本地仓库?

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

5 个答案:

答案 0 :(得分:46)

你可以在git中使用-f标志(它是一个标准的git标志)来强制推送。请参阅开发人员中心Git文档中的旁注。这将覆盖你在Heroku上做出的那些改变。

答案 1 :(得分:34)

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

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

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

然后通过删除并重新创建本地git repo来重新初始化:

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

<appname>是heroku中应用的名称。

2 repos(本地和远程)现在应为空并且同步。

答案 2 :(得分:5)

尝试转到https://github.com/heroku/heroku-repo并使用该插件远程清理。

答案 3 :(得分:3)

如果您的Heroku推送失败,因为它不是快进提交,并且您不想尝试对您的历史做任何简单的事情,这很简单:

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

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

  5. 另一方面,如果你真的想要清除历史,你还有其他一些选择。

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

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

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

答案 4 :(得分:2)

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