是否有可能将个人变更集重新定位到历史的早期阶段?

时间:2011-03-23 22:00:09

标签: mercurial rebase

这就是我们的树现在的样子:

@ branch: default
| new feature work
|
|
o branch: default
| new feature work
|
|
o branch: default
| bug fix C
|
|
o branch: default
| bug fix B
|
|
o branch: default
| new feature work
|
|
o branch: default
| bug fix A
|
|
o branch: default
| tag: ReleaseV1.0
|
|
 ... ancient history

这就是我希望我们的树看起来像:

@ branch: default
| new feature work
|
|
o branch: default
| new feature work
|
|
o branch: default
| new feature work
|
|
|
| o branch: V1.1Fixes
| | bug fix C
| |
| |
| o branch: V1.1Fixes
| | bug fix B
| |
| |
| |
| o branch: V1.1Fixes
| | bug fix A
| |
|/
o branch: default
| tag: ReleaseV1.0
|
|
 ... ancient history

这可能吗?

3 个答案:

答案 0 :(得分:2)

在这种情况下,我会使用transplant extension。移植的变更集不会在fixes分支中移动,而是保留在开发(default)分支中。我真的不知道那些“新功能工作”的提交是什么,但我觉得你正试图transplant

不删除“新功能工作”提交,历史记录图表如下:

  o branch: V1.1Fixes
  | transplanted bug fix C
  |
  |
@ | branch: default
| | new feature work
| |
| |
| o branch: V1.1Fixes
| | transplanted bug fix B
| |
| |
o | branch: default
| | new feature work
| |
| |
o | branch: default
| | bug fix C
| |
| |
o | branch: default
| | bug fix B
| |
| |
| o branch: V1.1Fixes
| | transplanted bug fix A
| |
| |
o | branch: default
| | new feature work
| |
| |
o | branch: default
| | bug fix A
| |
|/
o branch: default
| tag: ReleaseV1.0
|
|
 ... ancient history

如果那些“新功能工作”提交只是伪标志提交以保留开发树中的更改,那么如果transplant,则不再需要它们。我保留它们就好像它们是一些后期开发文档,更新日志更新,......

答案 1 :(得分:0)

查看RebaseProjectRebase Extension。您还可以使用Transplant Extension将分支机构中的补丁应用于一个或多个其他分支(以获得与Django历史记录相似的内容)。

答案 2 :(得分:0)

是的,这是可能的(只要新功能不依赖于对错误修复更改集所做的更改),但不建议这样做。
这可以通过在MQ中导入更改集,直到标记版本V1.0然后在正确的分支上重新提交来轻松实现。
但是,请记住这样做,您将更改历史记录,这意味着将修改这些更改集的所有哈希值,这意味着您将阻止所有已撤消最新更改的用户。