在 Heroku 上清理 git repo
Posted
技术标签:
【中文标题】在 Heroku 上清理 git repo【英文标题】:Clean git repo on Heroku 【发布时间】:2012-05-14 03:29:51 【问题描述】:情况如下:
我们有一些项目保留在 Github 上,并将其部署到 Heroku,它有自己的 mini-Git。一些更改直接应用于 Heroku(从 Heroku 克隆存储库,进行更改并推送)。与此同时,Github 上的 master 分支也有了一些变化。
现在,当我想将主存储库推送到 Heroku 时,推送失败,因为 Heroku 上的提交与本地提交不同步。
我不想与 Heroku 上的更改合并 - 我只想让它们消失。
有没有办法清理 Heroku 上的 git 存储库,然后从一开始就推送我的本地存储库?
我不想销毁应用程序并重新创建它,因为它有一些付费服务,而我只是一个合作者。
【问题讨论】:
heroku run bash
将您登录到应用文件夹,然后删除所有内容
【参考方案1】:
安装Heroku Repo plugin 并使用它来重置远程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 个存储库(本地和远程)现在应该是空的并且是同步的。
【讨论】:
【参考方案2】:您可以在 git 中使用 -f
标志(这是一个标准的 git 标志)来强制推送。请参阅开发中心 Git 文档中的附注。这显然会覆盖您在 Heroku 上所做的更改。
【讨论】:
【参考方案3】:尝试转到https://github.com/heroku/heroku-repo 并使用该插件远程清理。
【讨论】:
【参考方案4】:如果您的 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
创建一个empty master branch。
使用git-filter-branch。
就个人而言,我建议保留您的历史记录并修复快进问题作为最佳实践,但如果您想积极修改您的历史记录,您当然可以选择。 Git 在这方面非常灵活。
【讨论】:
【参考方案5】:您也可以简单地使用 heroku 的应用程序版本控制系统。 转到“Activity”,您将了解项目的完整历史记录:回滚到第一个 Activity,并且应该完全清理 repo,回到最初在 Heroku 上创建应用程序时的状态。
【讨论】:
那不行:! [rejected] master -> master (non-fast-forward)
我不知道,这是 Heroku 必须解决的问题。但是...您使用的是 Web 界面还是命令行?尝试使用网络界面...以上是关于在 Heroku 上清理 git repo的主要内容,如果未能解决你的问题,请参考以下文章
sh Bash / Git - 删除本地和远程分支以进行repo清理
sh Bash / Git - 删除本地和远程分支以进行repo清理
sh Bash / Git - 删除本地和远程分支以进行repo清理
sh Bash / Git - 删除本地和远程分支以进行repo清理