我有两个分支“主人”和“孩子”。
这应该是git的工作方式吗?
创建了一个测试仓库并复制了该仓库以供参考。 主(https://github.com/ashok-r/test_repo/tree/master), 子(https://github.com/ashok-r/test_repo/tree/child)
关于我们如何遇到此问题的背景。我们将“ master”分支用作稳定分支,并使用其他分支进行开发。我们必须还原一个提交(让我们将更改称为“ A”)。我们没有在开发分支上进行此操作并将其引入master,而是在master分支本身上进行了还原。几天后,我们在开发分支上添加了一个新提交,其中包括那些还原的更改('A')以及其他一些更改('B')。当我们将其合并到母版上时,仅添加新的更改('B'),而忽略先前还原的更改('A')。这是预期的行为吗?看到从提交中添加了一些更改而忽略了一些更改,这看起来很奇怪。
我知道直接在稳定分支上提交/还原是不理想的情况,但是如果这样做,那些确切的更改无法通过另一个分支带回来?
答案 0 :(得分:0)
是的,这就是它应该如何工作的。 我在类似案例中写了一篇简短的博客文章,解释了它为何如此工作。您可以在这里https://adventuresinscm.wordpress.com/2019/08/25/merge-from-master-overrides-a-revert-commit/
阅读简而言之,Git根据一个共同祖先执行三向合并(在您的示例中为fc82cf72)。它考虑了主机与CA之间的区别以及孩子与CA之间的区别。在您的情况下,子分支的顶端(184d08c0)与CA之间没有任何变化,因此从Git的观点来看,您正在合并没有任何变化的分支,因此它会跳过它并离开合并之前的母版内容。