你想要的最佳做法是什么? 修复旧提交中创建的错误?
假设您有以下提交 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告诉我,这可能是一个愚蠢的问题,但重要的是要知道你尝试了什么选项以及从中获得了哪些问题或好处。
答案 0 :(得分:3)
如果有问题的提交已经被推送到另一个存储库(Mercurial将使用commit phase跟踪它),那么我只是将新提交作为D
的子进程。创建错误修复作为B
的子进程并没有后续合并没有真正的优势 - 在E
的提交消息中注意到,这修复了B
中引入的错误。
如果引入该bug的提交仍然是本地的(在Mercurial的draft
阶段),那么您应该在将提交推送到任何地方之前编辑提交。
使用Mercurial,您可以使用附带的histedit extension:
$ hg histedit B
将打开一个编辑器,让您指定要为每个提交执行的操作。在与pick
对应的行中将edit
更改为B
。保存文件并关闭编辑器时,将开始编辑历史记录。您现在可以修复错误并运行
$ hg histedit --continue
当你对结果感到满意时。
在Git中,您使用所谓的interactive rebase来编辑历史记录:
$ git rebase -i B^
这将启动与Mercurial相同的过程。将pick
更改为edit
并关闭编辑器。根据自己的喜好编辑文件并修改提交,然后继续编辑历史记录:
$ git commit -a --amend
$ git rebase --continue