通过与子分支不同的提交在master分支上添加还原的更改不会反映到master

时间:2019-08-31 17:42:23

标签: git github version-control git-branch branching-and-merging

我有两个分支“主人”和“孩子”。

  • 我在子分支上添加了一个提交,并将其合并到主分支上。
  • 我在master分支(还分别在child分支)上还原了此提交。
  • 我在子分支上的第一次提交中添加了相同的更改(有点像revert of revert,但通过新提交添加为新更改)。
  • 当我现在尝试将子级合并到母版时,它并没有接受这些更改。

这应该是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')。这是预期的行为吗?看到从提交中添加了一些更改而忽略了一些更改,这看起来很奇怪。

我知道直接在稳定分支上提交/还原是不理想的情况,但是如果这样做,那些确切的更改无法通过另一个分支带回来?

1 个答案:

答案 0 :(得分:0)

是的,这就是它应该如何工作的。 我在类似案例中写了一篇简短的博客文章,解释了它为何如此工作。您可以在这里https://adventuresinscm.wordpress.com/2019/08/25/merge-from-master-overrides-a-revert-commit/

阅读

简而言之,Git根据一个共同祖先执行三向合并(在您的示例中为fc82cf72)。它考虑了主机与CA之间的区别以及孩子与CA之间的区别。在您的情况下,子分支的顶端(184d08c0)与CA之间没有任何变化,因此从Git的观点来看,您正在合并没有任何变化的分支,因此它会跳过它并离开合并之前的母版内容。