Git版本在主服务器上具有恢复的提交

Git版本在主服务器上具有恢复的提交,git,github,merge,release,revert,Git,Github,Merge,Release,Revert,我只是陷入了git的一个非常令人惊讶的行为中,遵循标准的dev/master 过去,我意外地将参与者的PRa合并到master,并使用GitHub在线“还原”功能添加还原提交R,以修复错误放置的提交。然后,我将A合并到dev master:…-1-2-3-A-R dev:…-1-2-3-4-5-6-A- 几个月后,我发布了一个新版本的软件,通过一个简单的合并(GitHub上的在线PR)将dev合并到master dev:…-1-2-3-4-5-6-A-7-8-9作为master的PR 合

我只是陷入了git的一个非常令人惊讶的行为中,遵循标准的
dev
/
master

过去,我意外地将参与者的PR
a
合并到
master
,并使用GitHub在线“还原”功能添加还原提交
R
,以修复错误放置的提交。然后,我将
A
合并到
dev

  • master
    :…-1-2-3-A-R
  • dev
    :…-1-2-3-4-5-6-A-
几个月后,我发布了一个新版本的软件,通过一个简单的合并(GitHub上的在线PR)将
dev
合并到
master

  • dev
    :…-1-2-3-4-5-6-A-7-8-9作为
    master的PR
合并现在实现了“嘿,我已经提交了
A
”,并应用了所有其他提交。但是现在,
A
的变化不在母版的头上,因为它也被
R
还原,然后重新播放,从
dev
合并到
master
,最后应该添加
A

代码方面,它看起来是这样的,而[7-8-9]是应用于主分支的合并提交的实际增量:

  • master
    :…-1-2-3-A-R-[7-8-9]
以下是实际的git历史,简化为GitHub网络可视化图形:

或作为文本图形(将包含全套要素分支)

因此,将
dev
合并到
master
会导致“已经是最新的”,而将
master
合并到
dev
会建议删除
A
。但是我想要一个

你知道吗

  • 正确的工作流是什么,可以优雅地还原这样的合并并在以后再次应用
  • 如何从这种情况中恢复
这样做的目的是避免重新调整,因为我所说的存储库是一个主线回购,在这里人们从分支开始开发新功能。我现在唯一的想法是在命令行上执行这样的恢复之后,将发布合并到
master

(master $=) $ git merge dev --strategy=theirs

对于第二个问题,恢复:我做了一个
git合并--strategy=ours mainline/master
,再次更新
dev
。我现在可以从
dev
->
master
正常合并,以起草一个新版本,包括
a
的更改。请使用实际合并箭头绘制图形,以便我们可以看到哪些提交合并到了哪些分支中。请注意,分支名称指向每个分支的tip commit,并将其自身“向后”提交给其父级。合并提交指向前两次提交,而常规提交指向前一次提交。你链接到的合并模型站点的箭头都是反向的(这对人类来说是有意义的,但Git坚持一切都是反向的)-这样做没关系,只要确保你指明了时间的方向,如果你这样做的话。谢谢你的评论!我澄清了我的问题并添加了一个图表。我使用
git log--graph--oneline--decoration--all
获得一个文本表单。这很粗糙。我有时使用
gitk--all
,但是
git日志
输出更容易复制,因为它是纯文本。(箭头表示输出是按拓扑排序的。)看起来非常像“取消混和”问题,已经讨论了多次:,,并给出了一些答案。
(master $=) $ git merge dev --strategy=theirs