git - Git 还原后 merge

标签 git version-control merge

我有两个分支(我们称它们为 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/

相关文章:

git - 来自私有(private) git 存储库的 Golang 和依赖项

git - Gerrit 补丁集依赖于过时的补丁集

git - 有什么方法可以默认为 git 命令设置标志?

git - 如何将旧分支转换为 GitHub 上的标签

mysql - sphinx 错误 : failed to merge index

MySQL 在一个表上合并两个带有 CASE 的 SELECT 查询

git - 从我的电脑上删除了 8Gb 的 10 GIT 行 - 如何取回它们?

git - git 会忽略空文件夹吗?

git - Atlassian Soucetree 2.3.1.0 : Difference between 'remove' and 'discard'

Git merge 是不可能的,因为我有未 merge 的文件