24

我想我在这里搞砸了。

我对上次提交的代码进行了一些更改,添加了新功能,并意识到其他一些代码现在表现得很奇怪。我决定回滚到一个旧的提交(也被推送到远程),以便测试那个功能到那时是否可以工作。

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

一切正常,我的代码恢复到那个提交。该功能在该提交中也表现不佳,因此我决定回到我最近的提交。

但是,除了回滚到最新的提交之外,我不知道该怎么做。但它给了我一个错误。

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

现在,似乎大多数事情都回来了,但当前版本的代码与我上次提交的代码不同。它介于两者之间。=(

我做错什么了?[我不是无辜的,我知道我做错了;)]

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

4

1 回答 1

32

我不知道 github for Mac rollback 做了什么,但似乎最好使用命令行来解决手头的问题:

git cherry-pick --abort- 停止任何正在进行的樱桃采摘

git branch -va- 会告诉你你的指针现在在哪里

确保您的工作目录是干净的: git status- 不应显示任何修改或暂存的文件

git stash- 如果任何修改仍然存在

git reset --hard your_local_branch github/remote_branch- 使本地分支反映远程端的状态。显然,如果您当前的分支将指向与远程相同的提交,则您不需要进行重置。如果你处于分离的 HEAD 状态(git status 会告诉你)然后回到正常状态只需检查你的本地分支。

现在决定你真正想要实现的目标:

I. 摆脱错误的提交?

使用交互式变基并删除错误提交的行,然后强制推送到 github 上的远程仓库(假设错误提交发生在 10 次提交前)

git rebase -i HEAD~11

二、恢复错误的提交?- 不建议在其他一些提交之后这样做,除非您绝对确定以下提交没有触及同一段代码。这将有效地创建反向提交(如果行是由错误提交添加的,它将被还原删除,反之亦然)

git revert {commit-sha1}

三、修改错误的提交?使用交互式变基,但指示它在错误提交时停止以进行修改。当它停止编辑更改并继续变基时,然后强制推送到远程分支(使用解决方案 I 中的变基命令)

完成后,如果有任何东西被隐藏,可以git stash pop用来恢复更改。

希望有帮助!

于 2012-10-12T18:39:52.797 回答