Git:合并后如何重置?

Git:合并后如何重置?,git,git-revert,Git,Git Revert,我已使用以下方法将朋友存储库中的主分支合并到我的工作目录中的分支中: git pull my_friend master 我发现合并的版本有错误。为了继续开发,我想恢复到合并前的最后一次提交。 我试过: 但这让我在合并后马上回到了这个州。(pull命令是否提交?!) 我还尝试: git revert HEAD 但收到以下错误: 致命的:提交 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 是一个合并,但未提供-m选项 我应该怎么做?HEAD指的是当前提交(通

我已使用以下方法将朋友存储库中的主分支合并到我的工作目录中的分支中:

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

但这让我在合并后马上回到了这个州。(pull命令是否提交?!)
我还尝试:

git revert HEAD
但收到以下错误:

致命的:提交 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 是一个合并,但未提供-m选项


我应该怎么做?

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

git reset --hard HEAD^
^
表示“的第一个家长”;对于常规提交,它是唯一的父级,而对于合并提交,它是您在合并时签出的提交(即合并到的分支的前一个尖端)

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


顺便说一下,
revert
并不是指你认为它能做什么(听起来你可能是在用svn的方式使用它?但我从来没有用过svn)
git revert
用于创建一个提交,该提交通过应用反向差异来取消(还原)上一次提交。当您要撤消已发布的单个上一次提交时,可以使用该提交。

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

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

我想你想要的是:

git reset [--hard] HEAD^
将在合并提交之前重置为提交

pull命令是否提交


是的。Pull是
fetch
merge
的包装器。如果您想在合并之前查看其他人的更改,您可以使用
fetch

我将标题中的“还原”更改为“重置”,因为重置是您试图实现的。对于不想进行硬重置的人,如@Jefromi所说,使用
git revert
来“撤消”上一次提交,留下两个事件的历史记录。有关git revert的更多信息,请参阅:
git reset [--hard] HEAD^