Git 修复旧提交中添加的bug的最佳方法?

Git 修复旧提交中添加的bug的最佳方法?,git,mercurial,Git,Mercurial,当您想要时,您遇到的最佳实践是什么 修复旧提交中创建的错误 假设您有以下提交 A->B->C->D,您发现在提交B时有一个bug 增加了 [编辑:A、B、C和D已经发布(由其他人推动)] 您是否会返回B并将修复添加为新的提交B'和合并 并获得E: A->B->C->D->E \->B'-----/ 或者在D之后添加修复 A->B->C->D->E Stackoverflow告诉我,这可能是一个愚蠢的问题,但重要的是要知道您尝试了什么选项

当您想要时,您遇到的最佳实践是什么 修复旧提交中创建的错误

假设您有以下提交 A->B->C->D,您发现在提交B时有一个bug 增加了

[编辑:A、B、C和D已经发布(由其他人推动)]

您是否会返回B并将修复添加为新的提交B'和合并 并获得E:

A->B->C->D->E
 \->B'-----/
或者在D之后添加修复

A->B->C->D->E

Stackoverflow告诉我,这可能是一个愚蠢的问题,但重要的是要知道您尝试了什么选项,以及您从中得到了什么问题或好处。

如果有问题的提交已被推送到另一个存储库(Mercurial将使用跟踪),那么我只需作为
D
的子项进行新的提交。作为
B
的子级创建错误修复程序并没有真正的好处,随后进行合并-在
E
的提交消息中指出,这可以修复
B
中引入的错误

如果引入错误的提交仍然是本地的(在Mercurial的
draft
阶段),那么您只需在将提交推到任何位置之前编辑提交即可

对于Mercurial,您可以使用附带的:

$ hg histedit B
此时将打开一个编辑器,允许您为每次提交指定要执行的操作。在与
B
对应的行中将
拾取
更改为
编辑
。保存文件并关闭编辑器时,历史记录编辑开始。您现在可以修复错误并运行

$ hg histedit --continue
当你对结果满意时

在Git中,您可以使用所谓的编辑历史:

$ git rebase -i B^
这将启动与Mercurial相同的过程。将
拾取
更改为
编辑
并关闭编辑器。根据您的喜好编辑文件,并在继续编辑历史记录之前修改提交:

$ git commit -a --amend
$ git rebase --continue

可能的重复取决于提交是否已被推送。是的,提交是由其他人推送的。