Git在分支之前拆分提交 [英] Git split commit before branch

查看:8
本文介绍了Git在分支之前拆分提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设您有以下历史记录:

         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

但通过使用git rebase--to C‘C Feature1.1,这个问题很快就解决了。

现在查看更具体的用例。如果功能1是您的主分支,A是您的初始提交,而您想要拆分A,那么您会如何做呢?同样的技术不起作用,因为在重新建立基础之后,它们不再具有共享的历史记录。

推荐答案

主要的祖先手术是git filter-branch领域,使用任何最方便的工具来进行任何内容更改。有时,在筛选器分支片段中最容易做到这一点,但在这里更容易提前设置内容,只需使用筛选器分支进行其祖先重写。您可以在不重写现有祖先情况下所做的事情是makeA---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

这篇关于Git在分支之前拆分提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆