【问题标题】:Git: How do I merge complex branches that have widely diverged with some missing history?Git:我如何合并与一些缺失的历史有很大分歧的复杂分支?
【发布时间】:2011-01-26 16:55:51
【问题描述】:

我有两个“分支”,它们都是从同一个代码库开始的,但是它们都是在它们分歧后被导入到 git 中的。先前的历史记录丢失了,另外两个分支的 git 历史记录中都记录了广泛的更改。

以可管理的方式合并这两个分支之间的功能和错误修复的好策略是什么?

是否有工具可以帮助我将原始导入中的差异分离为有意义的提交?

【问题讨论】:

  • 当您说丢失了先前的历史记录时,您的意思是在创建这两个存储库/“分支”之前没有现有的源副本?
  • 另外,您尝试合并的范围是什么?将两者重新合二为一,然后从那里开始正常的工作流程?继续分开,时不时地挑选一些东西?
  • Jefromi,这是正确的——没有先前来源的副本。两个存储库将继续单独工作,但我想将其中一个的更改合并(樱桃挑选?)到另一个。

标签: git merge branch git-merge


【解决方案1】:

听起来您想保留历史记录。我会使用rebase --onto--preserve-merges 将功能/错误移动到您要继续使用的分支。如果由于某种原因它们位于不同的结构中,请创建一个新分支,然后使用树操作执行filter-branch 以使结构相同。然后 rebase --onto --preserve-merges 就像在第一个场景中一样。

希望这会有所帮助。

【讨论】:

  • 感谢您的回答。我对 git 有点陌生,所以我需要一些时间来阅读这些命令和选项,看看它们是否能满足我的需求。代码在文件和目录结构中移动。
  • 制作一些 repo 副本并进行实验以查看命令的作用。我建议运行 gitk --all & 并定期刷新它以直观地查看发生了什么。
  • 嗨,你能解释一下你的解决方案吗?我已经阅读了 rebase 命令,但我没有提出一个好的解决方案。我们有 2 个分歧很大的分支。现在我从 svn 导入了两个分支。主控和分流 A-B-C-D 主控和 E-F-G-H 分流。现在,当我从 master 分支并在该新分支上进行更改并进行 3 次提交时。我想将 bugfix 分支合并到 master 并发散。请记住,应该忽略 master 之前的所有更改,因为源与发散的完全不同。你能解释一下你将如何解决这个问题吗?
  • 您可以使用--strategy=ourstheirs 忽略您合并的内容,但仍将其标记为已合并。
猜你喜欢
  • 2012-09-20
  • 2018-05-28
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2019-09-28
  • 2021-03-11
相关资源
最近更新 更多