【发布时间】:2017-08-17 19:23:02
【问题描述】:
当你想重新设置一个保持合并提交的分支时,你传递--preserve-merges 标志。当您在 git 中合并不相关的历史记录时,您需要传递 --allow-unrelated-histories 标志。
如果你正在做git rebase --preserve-merges,当现有合并来自不相关的历史时,它会失败:
致命:拒绝合并无关的历史
如果你尝试git rebase --preserve-merges --allow-unrelated-histories,它会失败:
错误:未知选项“允许无关历史”
还有其他方法可以告诉 rebase 允许合并吗?
编辑:这是一个最小的复制:https://github.com/vossad01/rebase-unrelated-merge-reproduction
要重现结帐master 然后执行:
git rebase --preserve-merges --onto origin/a-prime HEAD~2
【问题讨论】:
-
您能否向我们详细介绍一下您试图通过合并不相关的历史记录来解决什么问题?
-
@Schwern 我已经将它用于各种事情,但我最近遇到的几次案例是将项目的文档从 GitHub Wiki 移动到 GitHub Pages(当网站已经存在时)。保留历史记录(在这种情况下)的原因是 (1) 归功于贡献者和 (2) 保留修订历史记录。
-
我无法使用不相关的历史记录重现您的问题,我的测试存储库可能不够复杂。对于您的情况,rebase 可能是不合适的,这是假装一个代码库一直是在另一个代码库之上开发的。他们不是,你确实有平行发展,如果你保留它,历史会更有意义。正常的合并会更合适,或者subtree merge。
-
@Schwern 我添加了一个可以克隆的复制存储库。
-
我将举一个例子说明为什么这可能有用。我目前有一个曾经是几个回购的回购。我通过合并历史来组合它们。后来,我决定实际上不应该合并其中一个存储库。无论出于何种原因,当我试图从历史记录中删除它时,filter-branch 并没有为我工作。所以我想做一个基本排除合并的提交的变基。由于在那之后合并了其他项目,它将涉及不相关历史的变基合并。也许解决方案是让 filter-branch 工作。
标签: git git-rebase