当你想要的时候,你遇到的最佳实践是什么
修复旧提交中创建的错误?
假设您有以下提交
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