gpt4 book ai didi

Git: merge 结构非常不同的分支

转载 作者:太空狗 更新时间:2023-10-29 13:03:21 25 4
gpt4 key购买 nike

我们有一个名为 upgrade 的分支,它是 6 个月前从 master 分支出来的。在upgrade分支我们把所有的项目都改成了maven(master是ant项目),所以两个分支的一个项目x的结构是完全不同的。

为了将项目重组为 Maven,我们使用了 git mv,因此我们保留了历史记录。接下来,我们对 upgrade 上的文件进行了一些代码更改,因为升级过程需要这些更改。

现在我想将 master merge 到 upgrade 中,同时保留 upgrade 中存在的所有结构。我该怎么做?

我在 upgrade 分支上尝试使用 git merge master

但这并没有让我对我们在 upgrade 上所做的代码更改产生任何冲突;相反,它给了我属性文件中的冲突。 (我绝对确定 upgrade 上的代码更改与 master 冲突)——可能是哪里出了问题?

最佳答案

你想要的是使用 ours 策略(不是这个答案之前版本中提到的策略选项);在升级时,使用git merge -s ours master。根据git merge manpage中更详细的信息,这根本不会尝试进行实际的 merge ,而只是使用 ours 端的树作为结果并丢弃 merge 中的所有其他端。

使用 merge with 将保留所有历史记录,创建 merge 提交(显示历史记录中两个分支的融合),但使用 merge 一侧的所有文件。

请注意,“我们的”和“他们的”的含义仅取决于您在启动 merge 时所在的分支(“将升级 merge 到 master”与“将 master merge 到升级”,两者产生相同的结果产生的历史)。 “我们的”是您所在的分支,“他们的”是您在 merge 命令中指定的分支。有关更多信息,请参阅联机帮助页。

编辑:作为一个解释点:您(很可能)没有对您所做的代码更改产生任何冲突,因为 master 与通用代码库没有足够的分歧。默认情况下,git merge 使用三向 merge 策略,它获取要 merge 的两侧的最新共同祖先,并且只实际查看相对于该共同祖先的更改。如果只有一侧的分支取得进展,Git 会认识到那里的所有更改都会取代旧代码(在您的情况下,master 上的代码),并且它只会使用 upgrade 中的代码 自动(即自动解决“冲突”)。

您必须手动解决的冲突只会在 merge 双方与共同祖先相比发生变化时才会出现。在那种情况下,Git 不知道哪一方“更好”——甚至可能需要将这两个方面结合起来才能工作。这就是要求用户解决此类冲突的原因。

注意:答案已更新,因为我之前误解了 -s 和 -X 选项。

关于Git: merge 结构非常不同的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com