2

我正在尝试切断存储库历史的一部分,以便我可以将其移植回存储库,git replace本文所述

本文中描述的案例与我的存储库之间的主要区别在于,我的主分支已经存在分支。在我删除历史后,我想保持这些分支的布局和它们的分支点相同。

我的历史大概是这样的

    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

这意味着仅在初始树上 rebase master 是不够的,但我还需要在 master 的 rebase 之后在其等效的新提交上重播所有现有分支。我不想只重播新主人上的所有分支,因为那可能会产生冲突。

是否有任何智能且希望自动的方法来做到这一点?

4

1 回答 1

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

如果您对它的工作方式和原因有任何疑问,请感受树来发表评论。在执行此类操作之前,您可能需要备份您的存储库。

过滤器分支文档

注意:此命令尊重 .git/info/grafts 和 .git/refs/replace/。如果您定义了任何移植或替换参考,运行此命令将使它们永久化。

于 2013-02-07T13:39:48.543 回答