[英]How to git merge changes from main branch to orphan branch without adding to orphan's history?
[英]How to mark a Git branch as merged without adding history (Git merge -s ours --squash)
我有两个分支,它们有效地包含相同的文件,但由于遗留原因它们是分开的。 称他们为A和B.
如果我运行git log --oneline A ^B
Git输出114次提交,这是预期的。
然后,我可以运行git merge -s ours --allow-unrelated-histories A
分支B上的A,它向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
的历史可以从B
到达。
您可以使用git log --first-parent
来避免跟随合并历史记录(如果这不会省略其他合并提交所需的其他历史记录)。
你可以完全抛弃分支A
(如果你不希望它显示为一个未合并的分支,并且你不想看到它的历史,那么你想要它做什么?)
如果您确实希望存档A
历史记录,但通常不希望看到它,您可以将其迁移到通常不会看到它的归档仓库,或者用tag
替换branch
(因为应该有没有理由继续推进A
参考,如果它只是档案),然后至少它不是一个“未合并的分支”。
我想有点额外的背景......“压缩合并”的原因在这里不起作用是因为它根本不产生合并。 特定
... x -- x -- A <--(A)
... x -- x -- B <--(B)
正常合并会产生
... x -- x -- A <--(A)
\
... x -- x -- B -- M <--(B)
并且会产生正常的壁球合并
... x -- x -- A <--(A)
... x -- x -- B -- M <--(B)
不同之处在于M
不是合并。 它具有与合并相同的内容(技术上,相同的TREE
对象),但它只保留第一个父级; 事实上,git并没有“记住”它与A
有任何关系。
如果你告诉git保留B
(-s ours
)中的内容,则TREE
取自B
将它与squash
相结合将创建一个“空”提交 - 正如您所观察到的那样,它什么都不做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.