12

我已将朋友存储库中的主分支合并到我的工作目录到 branch_a 中,使用:

git pull my_friend master

我发现合并后的版本有错误。为了继续开发,我想恢复到合并前的最后一次提交。
我试过了:

git reset --hard HEAD

但这使我在合并后立即回到了该州。(是否拉命令提交?!)
我也试过:

git revert HEAD

但收到以下错误:

致命:提交 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 是一个合并,但没有给出 -m 选项。

我应该怎么办?

4

3 回答 3

31

HEAD指当前提交(一般是当前签出分支的尖端)。您已经提交了合并,因此HEAD指向合并提交。如果您想回到之前的提交,请使用:

git reset --hard HEAD^

意思是“^第一父母”;对于常规提交,它是唯一的父级,对于合并提交,它是您在合并时签出的提交(即您合并到的分支的先前提示)。

当然,如果您真的迷路了,只需打开gitk,然后复制/粘贴您要重置的提交的 SHA1 到 ( git reset --hard SHA1) 或者只需右键单击它并在gitk.

顺便说一句,revert这并不意味着你认为它做了什么(听起来你正在以 svn 的方式使用它,也许?但我从未使用过 svn)。git revert用于创建一个提交,通过应用反向差异来取消(恢复)先前的提交。当您想要撤消已发布的单个先前提交时,您可以使用它。

于 2010-08-24T12:55:00.017 回答
2

拉取后,HEAD已移至最新提交,这是将两个分支合并在一起的合并提交,而不是您上次处理的提交。所以这就是为什么reset HEAD不会改变任何东西。

revert HEAD也不是您想要做的,因为那是试图创建一个新的提交来还原合并提交的更改。(这就是你看到错误的原因;如果不告诉 git 你想返回两个父提交中的哪一个,你就无法恢复合并提交。)

我想你想要的是:

git reset [--hard] HEAD^

这将重置为合并提交之前的提交。

于 2010-08-24T12:55:30.587 回答
2

拉命令提交吗?

是的,它确实。Pull 是对fetchand的包装merge。如果您想在合并前查看其他人的更改,您可以fetch

于 2010-08-24T13:11:29.197 回答