Git 在分支之前拆分提交



假设您有以下历史记录:

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

现在我想将 B 分成两个提交以获得:

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

你不能只做 git 变基 -i ...然后选择编辑,因为您得到这个

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

但这通过使用 git 变基 --to C' C 功能1.1 可以快速修复。

现在来看一个更具体的用例。如果 feature1 是你的主分支,A 是你的初始提交,并且你想拆分 A,你会怎么做。同样的技术不起作用,因为在变基后,它们不再具有共享历史记录。

主要血统手术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

最新更新