【问题标题】:Git merge, then revert, then revert the revertgit合并,然后revert,再revert再revert
【发布时间】:2011-07-21 19:42:03
【问题描述】:

所以我们已经让一个 git 分支进入了一个棘手的状态:

两个分支:

* master
* other_branch

上周有人不小心将 other_branch (过早地)合并到 master 并推送到 origin。我们注意到了这个错误,我天真地承诺了

git revert bad_merge_commit

“解决”问题。一切看起来都很好,我们继续我们的生活......

今天我们尝试将 master 合并到 other_branch 作为将 other_branch 合并到 master 的一步。但我的回复似乎引发了一场噩梦。当 master 合并到 other_branch 时, other_branch 上的所有(大部分?)工作都被删除。我认为这是因为我的 revert 指示所有较旧的提交都被还原。

当然,在我的还原之上,master 上现在还有很多天的提交,所以解开这个看起来可能很困难。

有什么方法可以修复损坏吗?我是否可以提出一些变基论点并删除两个违规提交?

非常感谢!

[更新 - 根据要求添加当前状态的详细信息]

other_branch 很久以前就从 master 分支出来了。我们的标准做法是在进行过程中将 master 反复合并到 other_branch 中,以最大程度地减少冲突的累积(有时我们会变基,但在这种情况下不会)。

master 提交 A |乙| C | BAD_MERGE [other_branch_@S] | REVERT_OF_BAD | D | E | F ... 头

other_branch 提交 P |问 |右 | S [BAD_MERGE_FROM_HERE] | T |你 | V ... 头

尝试将主 HEAD 合并到 other_branch HEAD 会导致问题。

Charles,我目前正在尝试使用您在此处建议的解决方案修复 master 的副本:How to remove selected commit log entries from a Git repository while keeping their changes?

[/更新]

【问题讨论】:

  • 你能准确地说明(最好是带有明确的图片)你现在的状态吗?修复应该不会太难,但听起来你可能需要修复损坏,因为我第一次(最近)尝试将 master 合并到 other_branch 如果提交并推送。

标签: git merge revert


【解决方案1】:

是的,问题是还原撤消了合并引入的更改,但没有合并本身。我认为https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html 的附录部分描述了一个可能的解决方案。

本文档也是 Git 的一部分,在 Debian 下,您可以在 /usr/share/doc/git-doc/howto/revert-a-faulty-merge.txt 找到它

【讨论】:

  • 谢谢,这看起来非常准确地描述了我们的案例。我需要阅读和吸收。我这样做后会尽快回来。 :)
  • 是的,那里描述的 rebase --no-ff 似乎是关键。我们还有一些工作要做,但我认为你为我指明了正确的方向。谢谢! (这确实给我留下了一个后续问题:我应该做些什么来撤消错误的合并并避免这种情况,记住其他人已经将它推到了原点?)跨度>
  • code.google.com 的链接似乎不再包含所需的内容。
猜你喜欢
  • 2017-08-30
  • 2021-11-05
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2015-03-07
  • 2018-11-22
相关资源
最近更新 更多