在Heroku上撤销最近一次提交的Git操作

55

我进行了一次提交并将其推送到了源代码库和Heroku。

然后我意识到这不对劲,所以我做了...

git reset --soft HEAD^ 

但是当我推送到Heroku时,我遇到了以下问题:

To git@heroku.com:app.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@heroku.com:app.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

我理解这个问题。我该怎么做?我如何还原最后一次 heroku 提交?(我认为这将是最好的解决方法)

4个回答

71
如果您在本地还原了提交,则可能需要使用-f选项进行git push以强制提交。
此外,您可能还想查看Heroku发布,这可能也会有所帮助。

18
"heroku releases" 非常有价值,恰好是我所需要的。并且它还展示了 "heroku rollback",非常有用!" - Alexandre
4
"heroku releases" 很棒,但是我尝试回滚并推送没有成功。相反,我只需使用 --force 强制推送,这就解决了问题。" - user664833
1
heroku releases 列出了发布历史和版本号。选择您想要的版本号,然后执行(例如)heroku rollback v15 - Connor Leech

54

太棒了!!这正是你想要的工作方式。 我希望苹果公司也能在他们的应用商店中实现这一点。谢谢。 - noodl_es

9

假设您已经将代码推送到其他(公共?)存储库中,修复此问题的最佳方法可能是在本地撤消git reset,然后使用git revert创建一个新提交以反转错误提交的影响。然后再次推送所有更改,以下是具体步骤:

  1. 首先运行git reset --hard origin/mastergit reset --hard heroku/master(或者用于跟踪heroku的分支),以便将本地master分支回滚到错误提交之前。这将清除您工作副本中的任何未完成更改,请注意。

  2. 然后运行git revert HEAD来创建一个新的提交(它会提示您输入提交信息)。

  3. 最后像平常一样进行推送。


1
这是我所做的。首先,我使用旧提交记录创建了一个新分支:
git checkout -b old-rev <commit-id>

然后我在本地仓库上运行了push -f命令,将旧分支推送到heroku的主分支:

git push -f heroku old-rev:master

当我完成旧版本并准备开始使用新版本时:
git checkout master
git push heroku master
git branch -d old-rev  # deletes the old branch; warns if there will be data loss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接