Git恢复Heroku中的最后一次提交

我做了一个承诺,并将其推到了起源和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提交? (我认为这是最好的解决方案)

Martin asked 2020-02-21T03:55:52Z
4个解决方案
65 votes

如果您已在本地还原提交,则可能需要使用-f选项将其提交到git push,以强制提交。

另外,您可能想看看Heroku的发行版也可能有所帮助。

John Beynon answered 2020-02-21T04:07:16Z
44 votes

来自[http://devcenter.heroku.com/articles/releases#rollback]

使用rollback命令回滚到最新版本:

$ heroku rollback
Rolled back to v51

您可以选择指定另一个发布目标:

$ heroku rollback v40
Rolled back to v40
Devi answered 2020-02-21T04:07:45Z
9 votes

鉴于您已经推送到其他(公共?)存储库,解决此问题的最佳方法可能是在本地撤消git revert HEAD,然后执行git reset --hard heroku/master创建一个新的提交以消除错误提交的影响。 然后再次推送所有内容。 所以一步一步来:

  1. 因此,首先要git revert HEADgit reset --hard heroku/master(或您的heroku跟踪分支所调用的任何东西),以便使本地master返回错误的提交。 这会吹走工作副本中所有未完成的更改,因此请当心。

  2. 然后git revert HEAD创建一个新的提交(它将提示您输入提交消息)。

  3. 然后像往常一样推动。

Dave Goodell answered 2020-02-21T04:08:20Z
0 votes

这就是我所做的。 首先,我用旧的提交创建了一个新分支:

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
Benjamin Atkin answered 2020-02-21T04:08:49Z
translate from https://stackoverflow.com:/questions/5248103/git-revert-last-commit-in-heroku