【问题标题】:Git: How to reset after merging?Git:合并后如何重置?
【发布时间】:2011-04-03 03:49:23
【问题描述】:

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

git pull my_friend master

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

git reset --hard HEAD

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

git revert HEAD

但收到以下错误:

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

我该怎么办?

【问题讨论】:

  • 我在您的标题中将 'revert' 更改为 'reset',因为 reset 是您想要实现的目标。

标签: git git-revert


【解决方案1】:

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

git reset --hard HEAD^

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

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

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

【讨论】:

  • 对于不想硬重置的人,正如@Jefromi 所说,使用git revert 来“撤消”最后一次提交,留下两个事件的历史记录。有关git revert 的更多信息,请查看:this answer
【解决方案2】:

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

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

我想你想要的是:

git reset [--hard] HEAD^

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

【讨论】:

    【解决方案3】:

    pull 命令是否提交?

    是的,确实如此。 Pull 是 fetchmerge 的包装器。如果你想在合并前看到别人的变化,你可以fetch

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 2023-03-25
      • 2020-02-18
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多