Git版本在主服务器上具有恢复的提交
我只是陷入了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 合
dev
/master
过去,我意外地将参与者的PRa
合并到master
,并使用GitHub在线“还原”功能添加还原提交R
,以修复错误放置的提交。然后,我将A
合并到dev
:…-1-2-3-A-Rmaster
:…-1-2-3-4-5-6-A-dev
dev
合并到master
:…-1-2-3-4-5-6-A-7-8-9作为dev
master的PR
A
”,并应用了所有其他提交。但是现在,A
的变化不在母版的头上,因为它也被R
还原,然后不重新播放,从dev
合并到master
,最后应该添加A
代码方面,它看起来是这样的,而[7-8-9]
是应用于主分支的合并提交的实际增量:
:…-1-2-3-A-R-[7-8-9]master
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