我有两个分支(我们称它们为 A 和 B)。
A 是我的常规开发分支,B 是一个长期运行的功能分支。
A 通常会 merge 到 B 中以使其保持最新,并且有一天 B 将 merge 到 A 中,但我们还没有到那个时候。
大约一周前,一位开发人员不小心将 B merge 到 A 中,然后立即通过运行 git revert 取消 merge 。
从那时起,A 发生了许多变化,包括将其他功能分支 merge 到其中。
今天,我尝试像往常一样将 A merge 到 B,但现在我遇到了问题。
merge 正在从 B 中删除一些文件,这些文件是在 B 中添加的(大概是因为在运行 git revert 时它们是从 A 中删除的)并添加了一些从 B 中删除的文件(大概是因为它们是由git 恢复)。
它还取消了应该在 B 中进行的大量更改。
My question is is there any way to cleanly fix this?
I'm open to history re-write as we have a small team and we could coordinate this.
我尝试将 A 重置回错误 merge 完成之前的点,并挑选我们从那时起对其所做的更改,但由于已经有许多功能分支 merge ,所以很难(功能分支包含错误的 merge 提交并还原)。
最佳答案
最简单的解决方案,假设你想容忍丑陋的历史 id 来恢复 revert。
git revert SHA1-of-revert
后续 merge 应该可以正常工作。如果您想在以后相对容易地清理它,假设您已经根据不良恢复 merge 了所有功能分支(包括 future 的恢复)。
git rebase --interactive SHA1-of-revert~
然后删除还原行。这将为您提供完整的线性历史记录。如果要保留功能分支的 merge ,请添加 --preserve-merges
选项。
git rebase --interactive --preserve-merges SHA1-of-revert~
关于git - Git 还原后 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34291995/