如何将Heroku git存储库重置为其初始状态?

Gol*_*den 18 git heroku

我在git存储库中有一个Web应用程序.由于历史原因,Web应用程序不在存储库的根目录下,因此它位于名为的文件夹中website.除此之外还有一些其他文件夹,所以我有以下结构:

myApp
+- .git
+- otherFolder1
+- otherFolder2
+- otherFolder...
+- otherFolderN
+- website
Run Code Online (Sandbox Code Playgroud)

该网站在Heroku上运行.由于Heroku要求您的Web应用程序位于git存储库的根目录,所以直到现在我使用了一个构建过程,该过程将website文件夹复制到具有自己的git存储库的完全不同的(外部)文件夹.然后我就能从那里推到Heroku,一切都很好.

现在,因为git包含了这个subtree命令,所以不再需要了,因为我可以直接从我的初始文件夹中推送,但只是website子文件夹,使用:

git subtree push --prefix=website heroku master
Run Code Online (Sandbox Code Playgroud)

基本上,这非常有效.我只有一个问题:由于之前对Heroku的提交来自一个完全不同的git存储库,两者的历史记录彼此不匹配 - 因此Heroku检测到非快进推送,并拒绝subtree推送.

那么我该如何处理呢?

  • 想法1:强制推动.尝试过,但没有工作,因为git subtree push没有--force选项(或类似的东西).
  • 想法2:清除Heroku的存储库并再次从头开始.

我很想知道2,但我不知道如何实现这一目标.

我的第一个方法是运行一个git push heroku :master,但Heroku检测到这一点并否认它.

当然,我可以破坏应用程序并重新创建它,但是所有域分配和附加组件也都消失了,我想避免这种情况.

还有其他想法吗?

小智 50

您可以嵌套git命令来执行强制推送.

对于您的情况,命令将是:

git push heroku `git subtree split --prefix website master`:master --force
Run Code Online (Sandbox Code Playgroud)

  • @Ivan,我遇到了完全相同的问题(不是heroku,而是我自己创作的一个子树噩梦),这就解决了这个问题.我不确定我明白这是做什么的(但是,你可以添加的子树的输出是什么:掌握然后推它...你能详细说明为什么/如何工作?谢谢. (3认同)
  • 但是如何在Windows上执行此操作?我得到'错误:未知选项'前缀' (3认同)