繁体   English   中英

如何将Git分支标记为合并而不添加历史记录(Git merge -s ours --squash)

[英]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?

你不能。 gitA被合并到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM