Git恢复在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 (eg 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. 

我明白这个问题。 我应该如何继续? 我怎样才能恢复最后一个heroku提交? (我认为是最好的解决scheme)

如果你已经在本地恢复提交,你可能需要用-f选项来强制提交。

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

http://devcenter.heroku.com/articles/releases#rollback

使用rollback命令回滚到上一个版本:

 $ heroku rollback Rolled back to v51 

您可以select指定另一个版本来定位:

 $ heroku rollback v40 Rolled back to v40 

考虑到你已经推送到其他(公共)存储库,解决这个问题的最好的方法是可以撤销在本地的git reset ,然后做一个git revert创build一个新的提交,扭转不良提交的影响。 然后再推一切。 所以一步一步:

  1. 所以首先git reset --hard origin/master或者git reset --hard heroku/master (或者你的heroku追踪分支被调用),以便让你的本地master回到糟糕的提交。 这将消除工作副本中的任何突出变化,所以要小心。

  2. 然后git revert HEAD创build一个新的提交(它会提示你一个提交信息)。

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

这是我做的。 首先,我创build了一个新的分支与旧的提交:

 git checkout -b old-rev <commit-id> 

然后,我push -f本地回购的老分支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