回滚到之前的提交 - Github for MAC(还有一个还原正在进行中)

27

我觉得我搞砸了。

我对代码进行了一些修改,添加了一些新功能,并意识到另一部分代码现在表现异常。我决定回滚到一个旧的提交(也推送到远程)以测试那个功能在那时是否正常工作。

在我按下回滚之前,我提交了我当前所做的更改,因为我不想失去它们。提交后(未推送到远程),我回滚到了那个旧的提交。(请注意,在我回滚到的提交和刚刚提交的提交之间有相当多的提交。)

一切都很顺利,我的代码恢复到了那个提交状态。但是那个提交状态下的功能也出现了问题,所以我决定回到最近的提交状态。

然而,我不知道怎么做,除了回滚到最新的提交。但是这给了我一个错误。

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: revert failed
(32768)

现在,看起来大部分的东西都恢复了,但是当前代码版本与我的上一次提交不同。它介于两者之间。

我做错了什么?[我并不是无知地问这个问题,我知道我做错了;)]

正确的做法是什么?[我想我应该先创建一个分支]

1个回答

35
我不知道github for Mac rollback是什么,但似乎最好使用命令行解决问题: git cherry-pick --abort - 停止正在进行的cherry-pick git branch -va - 显示指针当前所在位置
确保您的工作目录干净: git status - 不应显示任何修改或暂存文件 git stash - 如果有任何修改仍然存在 git reset --hard your_local_branch github/remote_branch - 使本地分支反映远程端的状态。如果您的当前分支将指向与远程相同的提交,则显然不需要重置。如果你处于"detached HEAD"状态(git status会告诉你),那么只需检出本地分支即可回到正常状态。
现在决定你实际想要实现的目标:
I. 摆脱错误提交?
使用交互式rebase并删除错误提交的行,然后强制推送到github上的远程库(假设错误提交发生在10个提交之前) git rebase -i HEAD~11 II. 恢复错误提交? - 不建议在其他提交之后这样做,除非您绝对确定以下提交没有触及相同的代码片段。这将有效地创建一个反向提交(如果该行是由错误提交添加的,那么恢复时将删除它,反之亦然) git revert {commit-sha1} III. 修改错误提交? 使用交互式rebase,但指示它在修订时停止到错误提交。当它停止时编辑更改并继续重新基础操作,然后强制推送到远程分支(使用上述解决方案中的rebase命令)
完成后,如果有任何东西被stash,则使用git stash pop将更改带回。
希望这能帮助到您!

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