我们假设我有以下分支:
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
有什么想法吗?请知道我没有很好的知识,所以如果有人能够逐步解释这一点,那将会很棒。
答案 0 :(得分:3)
在你的步骤git add -i
之后,你可以在A的基础上进行B提交。
您通常通过添加文件进行拆分,可选择以交互模式进行拆分,您可以将更改拆分为单独的提交(参见git rebase --onto J B E
)。
当你完成分裂并完成你的J提交后,你可以在其上修改其余的历史记录:
xxx.com
表示重播提交开始(但不包括)B和J之上的(包括)E。