情况如下:
我们有一些项目坚持在Github上,并将其部署到Heroku,它有自己的mini-Git。一些更改直接应用于 Heroku(从 Heroku 克隆的存储库,进行更改并推送(。与此同时,Github上的主分支也获得了一些变化。
现在,当我想将主存储库推送到 Heroku 时,推送失败,因为 Heroku 上的提交与本地提交不同步。
我不想与 Heroku 上的更改合并 - 我只是希望它们消失。
有没有办法清理 Heroku 上的 git 存储库以从一开始就推送我的本地存储库?
我不想销毁应用程序并再次重新创建它,因为它有一些付费服务,而我只是一个合作者。
安装 Heroku 存储库插件并使用它来重置远程 git 存储库。
首先删除服务器上的 git 存储库:
> 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 个存储库(本地和远程(现在应为空且同步。
您可以在 git 中使用 -f
标志(它是一个标准的 git 标志(来强制推送。 请参阅开发人员中心 Git 文档中的旁注。 这显然会覆盖您在 Heroku 上所做的更改。
尝试去 https://github.com/heroku/heroku-repo 并使用该插件远程清理内容。
如果您的 Heroku 推送失败,因为它不是快进提交,并且您没有尝试对您的历史记录做任何时髦的事情,这很简单:
- 确保您的非 Heroku 存储库被定义为远程存储库。
- 获取所有遥控器。 使用
递归策略和"他们的"策略选项将您的其他存储库合并到您的本地 Heroku 克隆中。
git merge -X theirs remotes/origin/master
使用
--force
选项进行推送,以对上游 Heroku 存储库进行非快进提交。
另一方面,如果你真的想清除历史,你还有其他选择。
-
从历史记录中删除除第一次提交之外的所有提交(最简单的(。
git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1) git push --force
- 创建一个空的主分支。
- 使用 git-filter-branch。
就个人而言,我建议保留您的历史记录并解决快进问题作为最佳实践,但如果您想积极修改历史记录,您当然可以选择。Git 在这方面非常灵活。
您也可以简单地使用heroku的应用程序版本控制系统。转到"活动",您拥有项目的完整历史记录:回滚到第一个活动,存储库应完全清理,返回到最初在 Heroku 上创建应用程序时的状态。