如何更改git中的早期提交?

时间:2016-01-23 12:32:53

标签: git version-control git-branch git-rebase

假设我的主分支中有几个提交A-G。基于提交E,我创建了两个分支branchAbranchB,并基于提交F,我创建了一个分支branchC。假设我在提交D(在分支主服务器上)引入了一个严重错误,需要在branchAbranchBbranchC中进行处理。

我知道如何更改提交D并在那里解决错误(使用git rebase -i C) - 提供新的提交历史记录A-B-C-D' -E' -F' -G' 。但是,这不会影响我任何分支机构的历史。需要明确的是:branchAbranchB仍然基于E,而不是基于重写的提交E&#39 ;,它会破坏存储库结构。这不是我想要的 - 我宁愿想要完整的树,更新D'之后的所有内容。

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

2 个答案:

答案 0 :(得分:1)

如果您想要一个干净的历史记录,您可以在D'之上修改每个分支:

git rebase D' branchA
git rebase D' branchB

为了确保您没有犯错,您可以事后检查分支(git diff <sha1_of_branchA_before>..branchA)之前和之后的差异。

如果你已经与其他人分享了这些分支,那么它可能并不理想。如果是这种情况,您可能更愿意在每个分支中挑选一个补丁。但优点是,你知道每当你签出一个旧的提交时,你就不会登陆一个伪造的(只要你查看分支机构可以访问的提交,显然)

答案 1 :(得分:0)

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