在恢复的合并中查找提交

Posted

技术标签:

【中文标题】在恢复的合并中查找提交【英文标题】:Find commits in a reverted merge 【发布时间】:2015-08-06 09:37:55 【问题描述】:

我将一个未完成的分支合并为 master。我做了一个还原合并来反转代码更改。

现在的问题是我无法再次将此特定分支合并到 master。所以我现在打算做的是创建一个新的虚拟分支,并挑选丢失的提交并将其放入新分支并将上述分支合并到新创建的分支,并从新创建的分支恢复开发。这会奏效。

我的问题是在 git 中是否有一种巧妙的方法可以实现相同的目标?

我不想做revert的revert。

谢谢

【问题讨论】:

你推master了吗? 是的,我已经推送了 :( 澄清 master 是否回到满意状态(可能添加 DAG 的简短 ascii-art) 你这是什么意思? master 分支没有问题?再次尝试合并分支时的输出是什么? 【参考方案1】:

您的第二次合并不起作用,因为 git 知道它已经合并了。

你所说的樱桃采摘是一种选择。我建议你使用变基而不是樱桃挑选。

git checkout dev
// do your staff
git add .
git commit -m "Finish the work"
git rebase master

这样,您将再次从 master 分支的最后一个位置重新生成 dev 分支的所有历史记录。 git 现在允许你合并它。

【讨论】:

【参考方案2】:

除了你可能应该做的挑选樱桃之外,还有一个棘手的方法可以让 git 认为分支仍未合并 - 用相同的非合并提交替换合并提交。

git replace --edit <merge commit>

在编辑器中打开将是文本

tree AAAAA
parent BBBB
parent CCCCC
author ...

然后删除第二个“父”行(带有CCCC),保存,退出。现在合并提交会被 git 视为简单提交,分支可以再次合并。

可以在第二次合并后删除替换。

【讨论】:

以上是关于在恢复的合并中查找提交的主要内容,如果未能解决你的问题,请参考以下文章

git 怎样查找未合并的文件?

在没有变基的情况下恢复合并

从已推送的合并分支中恢复特定提交

恢复旧的合并提交文件而不影响后续提交

如何恢复到几个较旧的提交,包括合并,但在恢复提交的头部有一个提交? [关闭]

从 GitHub.com 上的受保护分支恢复合并提交