重新分支已经分支的分支

时间:2013-02-07 10:32:09

标签: git version-control git-rebase

我正试图切断存储库历史的一部分,所以我 如上所述,可以使用git replace将其移植回存储库 在this article

文章中描述的案例与我的案例之间的主要区别 存储库是,我的主分支有现有分支。我会 喜欢保持那些分支及其分支点的布局 在我删除了历史后的等价物。

我的历史大概看起来像这样

    cut here
      |
      v
o--o--o--o--o--o--o master
            \  \  \
             \  \  o--o   A
              \  o--o--o  B
               o--o--o    C

在“cut here”提交之前,master没有分支。

我想要实现的目标是:

o--o--o history

initial tree at cut
        |
        v
        o--o--o--o--o master
               \  \  \
                \  \  o--o   A
                 \  o--o--o  B
                  o--o--o    C

这意味着仅仅修改主人就不够了 初始树,但我还需要重播他们的所有现有分支 在高手变装之后等效的新提交。我不想只是 重播新主人的所有分支,因为那可能 有冲突。

有没有任何聪明且有希望的自动方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

这些命令将具有您正在寻找的结果:

git checkout --orphan temp-branch CUT–COMMIT
git commit // This will create your new initial commit
git rev-parse HEAD // To get the SHA of this commit
git replace CUT-COMMIT NEW-COMMIT
git filter-branch -- --all

如果您对此工作的方式和原因有任何疑问,请留下树留下评论。您可能希望在执行此类操作之前备份您的仓库。

来自filter-branch docu

  

注意:此命令符合.git / info / grafts和.git / refs / replace /。如果   您运行此命令时已定义任何移植或替换引用   会使它们成为永久性的。