我使用以下方法将来自朋友的存储库的主分支合并到我的工作目录中的branch_a中:
git pull my_friend master
我发现合并后的版本有错误。为了继续开发,我想恢复到合并前的最后一次提交 我试过了:
git reset --hard HEAD
但这让我在合并后立即回到了州。 (拉命令提交?!)
我也尝试过:
git revert HEAD
但收到以下错误:
致命:承诺 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 是合并但没有给出-m选项。
我该怎么办?
答案 0 :(得分:25)
HEAD
指当前提交(通常是当前签出分支的提示)。您已经提交了合并,因此HEAD
指向合并提交。如果您想要返回之前的提交,请使用:
git reset --hard HEAD^
^
表示“第一个父母”;对于常规提交,它是唯一的父级,并且对于合并提交,它是您在合并时检出的提交(即您合并的分支的先前提示)。
当然,如果您真的迷路了,只需打开gitk
,然后将要重置的提交的SHA1复制/粘贴到(git reset --hard SHA1
)或者右键单击它并在gitk
内重置。
顺便说一下,revert
并不代表你的想法(听起来你是以svn方式使用它,也许?但我从未使用过svn)。 git revert
用于创建一个提交,通过应用反向diff来取消(恢复)先前的提交。如果要撤消已发布的单个先前提交,则使用它。
答案 1 :(得分:2)
拉动之后,HEAD
已被移动到最新的提交,这是将两个分支放在一起的合并提交,而不是您上次处理的提交。所以这就是reset HEAD
不会改变任何东西的原因。
revert HEAD
不是你想要做的,因为那是试图创建一个新的提交来恢复合并提交的更改。 (这就是为什么你看到一个错误;你不能在不告诉git你想要返回的两个父提交中的哪一个的情况下恢复合并提交。)
我认为你想要的是:
git reset [--hard] HEAD^
将在合并提交之前重置为提交。
答案 2 :(得分:2)
是否提取命令提交?
是的,确实如此。 Pull是fetch
和merge
的包装器。如果您想在合并之前查看其他更改,则可以fetch