我有两个分支,它们有效地包含相同的文件,但由于遗留原因它们是分开的.称他们为A和B.
如果我运行git log --oneline A ^BGit输出114提交,这是预期的.
然后我可以git merge -s ours --allow-unrelated-histories A在分支B上运行,它向Git指示A已经合并到B而没有对结束文件状态进行任何更改.这是有效的,除了B现在接收这114个提交作为其历史的一部分(git log).
如何在不引入A的所有历史记录的情况下将A标记为合并到B?
我试过git merge --squash -s ours --allow-unrelated-histories A跟着git commit,但这没有任何影响.
概念上压缩-s ours提交应该给我我想要的东西,但它不起作用.
如何在不引入A的所有历史记录的情况下将A标记为合并到B?
你不能.当git说要A合并时B,意味着A可以从中获取s历史记录B.
您可以使用git log --first-parent以避免跟随合并历史记录(如果这不会忽略其他合并提交所需的其他历史记录).
你可以A完全抛弃分支.(如果您不希望它显示为未合并的分支,并且您不希望看到它的历史记录,那么您希望它用于什么?)
如果你确实希望存档A历史记录,但通常不希望看到它,你可以将它迁移到通常不会看到的存档仓库,或者branch用a 替换tag(因为没有理由继续推进A裁判,如果它只是档案),然后至少它不是一个"未合并的分支".
我想有点额外的背景......"压缩合并"的原因在这里不起作用是因为它根本不产生合并.特定
... x -- x -- A <--(A)
... x -- x -- B <--(B)
Run Code Online (Sandbox Code Playgroud)
正常合并会产生
... x -- x -- A <--(A)
\
... x -- x -- B -- M <--(B)
Run Code Online (Sandbox Code Playgroud)
并且会产生正常的壁球合并
... x -- x -- A <--(A)
... x -- x -- B -- M <--(B)
Run Code Online (Sandbox Code Playgroud)
区别在于M不是合并.它具有与TREE合并相同的内容(技术上,相同的对象),但它只保留第一个父级; 事实上,git并没有"记住"它与它有任何关系A.
在你告诉git保留B(-s ours)内容的情况下,TREE取自B.将其与之结合squash将创建一个"空"提交 - 正如您所观察到的那样,它什么都不做.