如何在分支历史中间拆分提交?

时间:2015-09-12 21:03:36

标签: git github

我们假设我有以下分支:

A -- B -- C -- D -- E 
                    ^(HEAD, master*)

我需要将B分成H和J:

A -- H -- J -- C' -- D' -- E' 
                           ^(HEAD, master*)
' means hash of C, D and E will be updated

这些方式不合适:

git rebase -i HEAD~3 #or
git reset --mixed HEAD~3

因为实际情况是目标提交(B)是~200次提交 早于主分公司的HEAD。所以我不想以交互模式列出所有内容。远程没有问题,因为它只是本地未跟踪/主题分支,我想学习如何对提交历史进行各种操作。

我尝试了什么:

git checkout B #detached HEAD mode
git reset HEAD^
# here I split B into two logically separated commits H and J
git rebase -i --onto HEAD master #? here I have no idea what to do next

# I also tried this:
git rebase -i HEAD~4 HEAD~2
# but the result is detached mode and no idea what to do next again

有什么想法吗?请知道我没有很好的知识,所以如果有人能够逐步解释这一点,那将会很棒。

1 个答案:

答案 0 :(得分:3)

在你的步骤git add -i之后,你可以在A的基础上进行B提交。

您通常通过添加文件进行拆分,可选择以交互模式进行拆分,您可以将更改拆分为单独的提交(参见git rebase --onto J B E )。

当你完成分裂并完成你的J提交后,你可以在其上修改其余的历史记录:

xxx.com

表示重播提交开始(但不包括)B和J之上的(包括)E。