【问题标题】:Change Git "branch point" to an earlier commit将 Git “分支点”更改为较早的提交
【发布时间】:2022-07-21 19:19:52
【问题描述】:

从我的主要功能分支,我开始了一个新的功能分支。完成此功能后,我开始了另一个新功能分支。是否可以更改第二个子功能分支的分支点,使其从主功能分支分支?

也就是说,我有这个:

A --> B --> C --> D --> E --> F
      ^           ^           ^
      |           |           |
   Head of     Head of     Head of
    feat0       feat1       feat2

我想把它变成这样:

        .--> E --> F
       /
A --> B
       \
        `--> C --> D

CD 中的更改(几乎)与 EF 中的更改相互排斥。

我认为rebase --onto 可能会成功。在F 我做了git rebase --onto B。这将feat2 的头部移动到B,失去EF;绝对不是我想要的!

我的第二个想法是,我可以在 FB 进行交互式变基,删除 CD,调整任何导致冲突的提交。这似乎奏效了,但它是不必要的混乱和参与。

有没有更好的办法?

【问题讨论】:

  • 也许可以通过reset来完成? BranchFromE 重置为 B 并提交,BranchFromF 重置为 B 并提交,cherry-pick BranchFromF 进入 BranchFromE,现在 BranchFromE 可以成为 feat2 的负责人

标签: git git-branch


【解决方案1】:

您可以通过以下方式执行此操作:

git rebase D F --onto B

任何变基的完整形式都有 3 个参数:

  • 底座 (D)
  • 分支(F)
  • 新基地 (B)

由基础和分支标识的“移植”将被“视为差异”并在新基础上重放,即“重新基础”。

每当您使用带有较少参数的 rebase 时,都会根据当前 HEAD 的位置等推断出这些参数中的一个或多个。

这个操作也可以通过cherry-pick来完成,因为变基和cherry-pick在概念上是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2018-07-17
    • 2022-08-24
    • 1970-01-01
    • 2022-06-23
    • 2016-06-04
    • 2020-12-27
    相关资源
    最近更新 更多