假设我的主分支中有几个提交A-G。基于提交E,我创建了两个分支branchA
和branchB
,并基于提交F,我创建了一个分支branchC
。假设我在提交D(在分支主服务器上)引入了一个严重错误,需要在branchA
,branchB
和branchC
中进行处理。
我知道如何更改提交D并在那里解决错误(使用git rebase -i C
) - 提供新的提交历史记录A-B-C-D' -E' -F' -G' 。但是,这不会影响我任何分支机构的历史。需要明确的是:branchA
和branchB
仍然基于E,而不是基于重写的提交E&#39 ;,它会破坏存储库结构。这不是我想要的 - 我宁愿想要完整的树,更新D'之后的所有内容。
我该如何解决这种情况?在这里修改主分支的历史是正确的想法吗?
答案 0 :(得分:1)
如果您想要一个干净的历史记录,您可以在D'
之上修改每个分支:
git rebase D' branchA
git rebase D' branchB
为了确保您没有犯错,您可以事后检查分支(git diff <sha1_of_branchA_before>..branchA
)之前和之后的差异。
答案 1 :(得分:0)
你做不到。 git不是为重写历史而设计的。但它专为强大的分支和合并而设计。如果修复很小,我建议您引入一个新的提交,将程序修复到主分支,然后您将该提交选择到需要修复的其他分支。