git修复旧合并并保留后续提交

时间:2019-03-18 21:35:16

标签: git

初始情况:

M0 ----- M1 -- M2 -- M3 -- M4 -- M5
|-- A1 --/\    |                 |
\-- B1 ---|----/                 |
           --------- A2 ---------/

2个开发人员正在一个存储库上工作,两者都从M0分支开始。开发人员A在分支A1上工作,完成后将其合并为M1进入主分支。他直接创建一个新的分支,使用特征A2。 B同时正在B1上工作,并在完成后合并到M2中。但是,在此合并期间,将放弃在M1中所做的一些重要更改。 B在顶部(M3,M4)创建更多提交。当A完成在A2上的工作并想重新合并到主服务器(M5)中时,已在M1中引入并因此属于M2的更改将被删除/甚至不会显示为冲突。 (->我猜这是预期的行为,因为M4和A2共享同一父M1?)

当前状态:

M0 ----- M1 -- M2 -- M3 -- M4
|-- A1 --/\    /
\-- B1 ---|---<
          |----\----- A2 ----------\
          M1---M2*-- M3* -- M4* -- M5

为解决此问题,我从M1创建了一个新分支,然后重新合并(M2 *)。然后,我进行了一个基础调整,以在M2 *之上添加M3 *和M4 *。最后,我能够将A2合并为M4 *,从而获得所需的M5。不幸的是,M4已经被推到了原处。因此,如果我想在M5上打开请求请求,这将再次引入M2的错误版本。 ->因此,我的下一步是执行git push --force origin master(同时确保开发人员B已完成所有更改)。是建议使用此整体解决方法,还是有一种更好的方法来处理所描述的情况?

1 个答案:

答案 0 :(得分:0)

如果“重写历史记录”是一个选项,我将检出M2,对其进行更正和修改(在修改后称为M2'),那么我会选择M2..M4然后合并A2,创建M5'。然后,我将分支(main?)指向M5',那将是它的结尾(强制将其推到需要的位置)。

作为补充说明,,将A2M4合并时应该没有冲突,因为代码已被删除,这与祖先无关紧要(除非删除的代码涉及A2上完成的工作所涉及的代码。