当你想要的时候,你遇到的最佳实践是什么
修复旧提交中创建的错误?
假设您有以下提交
A->B->C->D您发现在提交B时有一个错误
已添加。
[编辑:A、B、C、D已出版(由他人推送)]
你能回到b把修正作为一个新的提交b'并合并吗
得到e:

A->B->C->D->E
 \->B'-----/

或者把它加到d之后?
A->B->C->D->E

stackoverflow建议我,这可能是一个愚蠢的问题,但重要的是要知道你尝试了什么选择,从中得到了什么问题或好处。

最佳答案

如果有问题的提交已经被推送到另一个存储库(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

09-03 23:59
查看更多