分支之前的Git拆分提交

问题描述 投票:2回答:1

假设您具有以下历史记录:

         D———G feature1.1
        /
...A-B-C-E-F  feature1

现在我想将B分成两次提交以得到:

             D———G feature1.1
            /
...A-B1-B2-C-E-F  feature1

您不能只执行git rebase -i ...,然后选择编辑,因为您得到了这个

     B-C-D-G feature1.1
    /
...A-B1-B2-C'-E'-F'  feature1

但是通过在C'C feature1.1上使用git rebase可以快速解决此问题。

现在是一个更具体的用例。如果feature1是您的主分支,A是您的初始提交,并且您想拆分A,那么您将如何处理。相同的技术不起作用,因为在重新设置基准之后,它们不再具有共享的历史记录。

git git-branch git-rebase
1个回答
1
投票

大宗外科手术是git filter-branch领域,使用最方便的工具来进行任何内容更改。有时,这是在“过滤器分支”摘要中“在您在那里时”最容易执行的操作,但在此可以更轻松地提前设置内容,而仅使用过滤器分支进行祖先重写。您无需重写现有血统就可以做的事情是A---B1---B2,首先开始做

git checkout B
git reset A

并且您的工作树现在是B内容,您的索引是A内容,并且HEAD,即您的下一个提交的父对象是A,因此添加B1内容是最方便的:]]

git add files whose changes all belong in B1
git add --patch files whose changes partially belong in B1
git reset --patch any hunks you added by mistake
git commit   # this makes B1
git add .    # everything that remains belongs in B2, so add everything
git commit   # this makes B2

现在剩下的唯一事情就是重新连接血统,不需要更改任何内容。进行仅本地重新布线,然后使用git filter-branch将本地历史重写到依赖于它的所有重写历史中:

git replace --graft C B2
git filter-branch -- --all
© www.soinside.com 2019 - 2024. All rights reserved.