2016-01-23 62 views
0

假设我在主分支中有几个提交A-G。基于提交E,我创建了两个分支branchAbranchB,并基于提交F创建了一个分支branchC。假设我在提交D(在分支主机上)中引入了一个严重错误,需要在branchAbranchBbranchC中对待。如何在git中更改提前提交?

我知道如何更改提交D并解决那里的错误(使用git rebase -i C) - 给出一个新的提交历史A-B-C-D'-E'-F'-G'。但是,这并不影响我的任何分支机构的历史。要清楚:branchAbranchB仍然基于E而不是重写的提交E',这会破坏存储库结构。这不是我想要的 - 我更希望完整的树,以及D'后的所有内容都更新。

我该如何解决这种情况?在这里修改主分支的历史是否正确?

回答

1

如果你想要一个干净的历史,你可以变基每个分支上的D'顶部:

git rebase D' branchA 
git rebase D' branchB 

为了确保你没有犯了错,你可以事后检查的区别分支前后(git diff <sha1_of_branchA_before>..branchA)。

如果您已经与其他人共享这些分支,这可能并不理想。如果是这种情况,您可能宁愿在每个分支中选择一个补丁。但优点是,你会知道,每当你结账一个旧的提交,你不会登陆一个假的(显然,只要你签出一个提交分支的提交),

0

你不能那样做。 git不是为重写历史而设计的。但它专为强大的分支和合并而设计。如果修补程序很小,我建议您引入一个新的提交程序,将程序修复到主分支中,然后将该提交选择到需要修复程序的其他分支中。