【问题标题】:Git: How to revert a merge and two other adjacent commits?Git:如何恢复合并和其他两个相邻的提交?
【发布时间】:2018-04-19 04:00:41
【问题描述】:

我们有这个 git 日志:

D:\blah>git log -n 5 --oneline    
fc19dec My change #2
68fa9db Merge branch 
4bc1ac7 My change #1
ec345d9 [maven-release-plugin] prepare for next development iteration

我想恢复到 ec345d9,但出现错误:

D:\blah>git revert --no-commit ec345d9..HEAD
error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: revert failed

我怎样才能做到这一点恢复?

我知道issue 需要恢复合并并需要指定 -m 选项。当我过去使用它时,我只是恢复一个单一的合并提交。但在这种情况下,合并提交夹在我试图恢复的其他两个提交之间。

【问题讨论】:

  • 您是否尝试过中止您要放弃的樱桃采摘?
  • 您确定要还原吗?由于 ec345d9 之后没有您想要保留的提交,所以结帐/移动主人会不会更容易? "revert" 创建与恢复的提交相反的新提交:它将 forward 滚动到旧状态。 checkout / branch -d master / branch master(或您所在的任何分支)只需将分支 back 回滚到所需的提交,并使其他提交悬空。下次你 gc 时它们会消失。

标签: git merge revert


【解决方案1】:

首先,当您指定-m 1(或其他主线编号)选项时,请确保您的合并不包括来自其下方提交的更改。

(嗯,首先首先,完成或中止樱桃选择或恢复你现在的中间状态。然后检查合并是否包含其中一个提交的更改。)

既然您已经确定哪些提交需要恢复,哪些需要使用-m 选项,哪些需要 使用-m 选项,最多一次做一个- 最近优先:

git revert fc19dec
git revert -m 1 68fa9db
git revert 4bc1ac7

例如。请注意,这会产生三个单独的新提交,每个都执行一个还原。 (这也是您使用 .. 表示法会得到的结果。)如果您想获得一个大的还原提交,请每次使用 git revert -n,并在完成后单独提交最终结果。

【讨论】:

  • 最后我意识到我不需要恢复合并,所以我只做了第一次和第三次恢复,它工作正常。谢谢。
猜你喜欢
  • 2022-10-20
  • 2018-07-01
  • 2021-12-12
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2012-10-19
  • 2017-07-14
相关资源
最近更新 更多