Ruby on rails 如何在调试Heroku应用程序时避免大量提交

Ruby on rails 如何在调试Heroku应用程序时避免大量提交,ruby-on-rails,git,heroku,Ruby On Rails,Git,Heroku,当我试图用Heroku上的应用程序清理bug时,我通常会得到一堆与bug修复过程相关的Git提交,因为我需要提交更新才能推送到Heroku。在推送到项目的主要共享回购之前,有没有什么聪明的方法来清理这些提交?你可以做一个git-rebase-i并编辑/挤压/删除提交,然后推送到Heroku。在开始调试时创建一个新的分支(git-checkout-b debug或类似),然后在那里进行所有的提交,通过git-push-Heroku-debugation:master将它们推送到Heroku而不是您

当我试图用Heroku上的应用程序清理bug时,我通常会得到一堆与bug修复过程相关的Git提交,因为我需要提交更新才能推送到Heroku。在推送到项目的主要共享回购之前,有没有什么聪明的方法来清理这些提交?

你可以做一个
git-rebase-i
并编辑/挤压/删除提交,然后推送到Heroku。

在开始调试时创建一个新的分支(
git-checkout-b debug
或类似),然后在那里进行所有的提交,通过git-push-Heroku-debugation:master将它们推送到Heroku而不是您的主机上

然后,在解决问题后,可以将调试更改压缩为一次提交,并将其合并回主控:

git checkout master
git merge debugging --squash
git branch -D debugging

有很多其他方法可以做到这一点,归根结底,你会发现哪种方法最符合逻辑。

你真的不想清理这些提交。您要做的是将它们封装在合并提交中:

  • 签出主机--
    git签出主机
  • 为您的主题创建一个分支--
    git checkout-b my cool bug fix
  • 在你的分公司工作
  • 准备好后,再次执行git checkout master,然后执行非快进合并。这很重要:使用
    --no ff
    选项强制非快进意味着将始终创建合并提交。在本例中,命令将是
    gitmerge--no ff my cool bug fix
  • 您现在有了一个主节点上的合并提交,它封装了所有分支提交,但保留了提交历史,这样Git的历史分析工具就不会中断
  • 测试修复程序后,
    git-push-heroku

只是好奇而已。您是否在开发和测试环境中为您的应用程序使用PostgreSQL?我可以问一下为什么需要删除它们吗?它们是不是像其他东西一样无效?坏主意。挤压是不好的,因为它阻止Git对挤压前和挤压后提交之间的连接进行推理。请看。@MarnenLaibow Koser我认为在大多数情况下这是正确的,但在这里,做出这么多提交的唯一原因是,必须进行这些提交,以便测试它们是否正确。当您不知道是否已解决问题时,您通常不会进行提交。如果不需要提交甚至测试,那么可能只有一个提交来解决这个问题。我并不认为这改变了反对挤压的论点。如果作出了承诺,通常应保留这些承诺(特别是如果将其推送到远程回购);否则,Git无法正确地跟踪祖先。然而,我确实认为OP应该找到一种本地测试的方法,这样他就不必为了测试而推到Heroku。@MarnenLaibow Koser在我曾经使用过的Heroku中,曾经有过这样的情况,所有东西都在本地工作,而不是远程工作。如果推送到的远程回购协议是由其他开发人员拉到的,那么是的,永远不应该被覆盖,但是Heroku远程回购协议(通常)永远不会被拉到。我不同意那些一开始就没有太多意义的承诺(尤其是其中的许多)应该被保留,因为它们可以被压缩成一个,仍然很小并且包含在内,具有更大意义的承诺。“这可能会解决问题”的提交不是很有用,也没有什么意义。@MarnenLaibow Koser如果问题只发生在远程服务器上,因此无法在本地测试,那么在提交前如何测试某些内容,并且获取服务器更改的唯一方法是推送提交??这没有任何意义,任何数量的隐藏或部分提交都不会改变这一点。这正是我的观点:这是一个特殊情况,应该如此对待。
git-rebase-i
与挤压问题的原因相同。为什么要投否决票?如果你愿意解释,我很乐意回答这个问题。