Git 破坏性合并

Git destructivly mergeing

我刚开始在一家新公司使用 GIT,并导入了项目的最新开发版本 (v1.4) 作为初始提交。当我的老板生产 v1.3 时,我一直很高兴地分支项目以添加新功能,该版本是独立于 v1.4 开发的,因此包含 1.4 中没有的功能。

所以我需要将 1.3 添加到 GIT 并将其合并到 master 中。

显然 1.3 缺少所有新的 1.4 代码,而 1.4 缺少新的 1.3 代码。

我给master分支了,把分支叫1.3,然后把1.3的文件复制到分支里commit。

我认为合并应该是非破坏性的,所以如果我将 1.3 合并到母版中,它要么会很好地合并,要么更有可能给我带来大量我可以手动解决的冲突。实际上正在做的是从我合并到的分支中删除任何新代码,所以如果我将 1.3 合并到 master 中,我将丢失主文件中所有新的 1.4 代码,如果我将 master 合并到 1.3 中,我将丢失所有新的 1.3 代码.

所以在 master 中我有大量的通用代码和 2 个在 1.4 中添加的新函数,称为 new14function() 和 anotherNew14Function()。在 1.3 分支中,我没有这些功能,但我有一个 new13Function() 不在主分支中。当我将 1.3 合并到 master 时,它会删除 new14function() 和 anotherNew14Function() 函数。我想要的是 master 包含 ew14function(), anotherNew14Function() 和 new13Function().

我哪里做错了,如何在不破坏其中一个分支的内容的情况下合并这两个文件?

好的,因为 1.3 从未在源代码控制下,您确实会有很多合并冲突 - 事实上,任何文件中的任何差异都将是合并冲突。您需要做的是创建一个没有父分支的分支,并将 1.3 代码复制到其中,然后将该分支合并到 master(或其他分支)中。为此,请使用 git checkout --orphan v1.3

同样,这是假设 1.3 代码从未受到源代码控制。相反,如果 1.3 代码的开发人员从提交 X 的副本开始,您应该从 X 开始您的 v1.3 分支。这将为您避免一些冲突。

您的方法不起作用的原因是您从代码之后的提交分支,而 1.3 代码实际上发生了分歧,因此 git 认为此后的所有更改都在 1.3 中分支(none 在 main/1.4 分支中),因此 1.3 分支 "wins".