【问题标题】:Git: How to manually manipulate/craft a merge between two branches when no conflict occursGit:如何在不发生冲突时手动操作/制作两个分支之间的合并
【发布时间】:2015-02-27 02:47:01
【问题描述】:

假设有一个功能分支,我们将其称为分支A
分支A 包含三个文件,A1 (index.html)、A2 (main.css) 和 A3 (script.js)。
从分支A,创建/签出分支B,提供B1B2B3
现在,假设 B1 - B3 的所有内容被完全删除并且编写了完全不同的代码,然后提交到分支 B
假设分支B的所有文件的新代码最终都需要作为它的子集集成到原始代码中。

我希望能够通过检查分支A 并运行git merge B 来实现B 代码与A 代码的集成。我认为这会给我带来合并冲突,我可以制作新版本的A1 - A3 以提交到分支A。 然而,Git 并没有产生预期的合并冲突,而是将所有 A 代码完全替换为 B 代码。

这两个分支的代码如何整合?
我意识到可以从B 文件中复制代码并将其传递到A 文件的代码中,所有这些都在Git 之外。不过,我认为这是一个不太理想的解决方案,因为项目历史不会反映 A 的某些代码来自 B 的事实。

【问题讨论】:

  • 我遇到了几乎完全相同(虽然不那么严重)的问题。很遗憾没有人回答这个问题,因为解决方案真的很有用。也许如果我问一个没有可能阐明的分支的问题。

标签: git merge git-merge


【解决方案1】:

如果您在分支 A 上没有新提交,则分支 BA 的后代。因此,合并(默认情况下)作为快进完成,即仅将A 设置为B,不会生成显式合并提交。 (您可以使用 git merge --no-ff 选项生成显式合并提交。)

合并的想法是将所有新更改集成到旧状态。如果更改是用完全不同的东西替换一个文件的内容,那么通过在分支A 上执行此操作来集成该更改,这将产生新的内容。

我目前想不出这不是你想要的情况。

【讨论】:

  • 假设文件中有文本。您编辑、保存和提交。然后编辑原始文本(可能在编辑器的不同副本中),保存然后提交。所以现在你有两个来自同一个文件的不同编辑的提交。您想合并它们,但git merge 假定文件历史记录说明了整个故事,并拒绝让您以理智的方式这样做。我不知道如何使用git merge --no-ff 来执行您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2020-08-23
  • 2013-10-26
相关资源
最近更新 更多