mercurial - 将过去的反复提交移至不同的分支
问题描述
1 -- 2 -- 3 --------- 7 C
\ \- 4 / B
\------------5----/ A
我最终在我的 mercurial 存储库中得到了上面的分支结构。我真正想要的是提交 2 和 3 在分支 B 上,如下所示:
1 -- 2 -- 3 -- 4 B
\ ------------5 A
有没有一种很好的方法可以追溯获得这种结构?
解决方案
我会有点不同意DaveInCaz 的回答,但最后,同意结论:你应该能够忍受你所拥有的;没关系。
从技术上讲,在 Mercurial 中,一旦提交,它就在一个分支上,而它所在的分支就是你提交时所在的一个分支。因此,如果您在分支上C
并提交了 2 和 3,那么提交 2 和 3 就在 branch 上C
,现在和永远。
但这对于完成工作并不重要。提交 4 在分支上B
,提交 4 的父级是 commit 3
,其父级是 commit 2
。他们在其他分支上的事实通常并不重要。
(此设置与 Git 完全不同:在 Git 中,提交位于可以访问其提示的所有分支上。可以随时创建和销毁分支提示名称,指向任何现有的提交。这意味着分支集合某个提交是在一天到另一天的更改。实际上,Git 中的分支名称没有任何内在含义。您可以随时添加、删除或更改任何名称。提交不会更改,但分支集到达他们的名字。)
如果出于某种原因——例如,某些外部工具要求提交的分支名称是B
而不是C
——你确实想要或需要移动这些提交,答案是你实际上根本不能移动它们,但是你可以 复制它们:
C: 1 -- 2 -- 3 --------- 7
B: \ \- 4 /
A: \------------5----/
可以变成:
C: 1 -- 2 -- 3 ------------------ 7
|\ \ /
B | \ 4 /
B: | \ /
B | -------- 2b - 3b - 4b /
\ /
A: ---------------------- 5
请注意,复制2
到2b
和3
到 后3b
,您现在还必须复制4
到4b
。两者4
都4b
在分支上B
,分支B
现在有两个头。
正如 DaveInCaz 所指出的,您可以删除不需要的提交。如果它们存在于您与之交谈的其他克隆中,那么每次您与该克隆交谈时它们都会回来,除非您也将它们剥离在那里。
推荐阅读
- python - I want to filter rows from data frame where the year is 2020 and 2021 using re.search and re.match functions
- r - validObject(.Object) 中的错误:无效的“mpfr”类对象:并非所有组件都属于“mpfr1”类
- angular - 无法绑定到 [(ngModel)],因为它不是由任何适用的指令提供的
- php - wooCommerce - 送货方式和基于价格的送货地址
- javascript - 如何从异步函数(javascript)返回值?
- python - 将dash-leaflet控件映射到地图外的其他按钮
- c - 无法从 NULL 创建链表
- python - 使用 Python 进行竞争对手价格分析
- python - 是否有一种 O(n) 方法可以在不使用计数器的情况下找到列表中重复次数最多的项目
- python - 运行单个冗长计算的服务