0

今天我git bisect成功地追踪了引入错误的提交。当我进入二分法时,我注意到实际上有两个错误,在两个单独的提交中引入。现在我喜欢修复其中一个错误,然后git bisect再次使用以找到第二个错误。为了做到这一点,我认为我应该修复第一个错误,以便该错误在历史的每个阶段都消失,对吗?也就是说,我应该修复引入错误的提交,然后我应该调整应用于错误代码的每一个更改。只有这样我才能开始第二次平分以寻找第二个错误。

是否可以修改过去的提交,以便 git 仍然知道这些提交是对现有提交的修改?当然,其他开发人员应该只能获取错误修复,而不是完整的新历史。也就是说,任何用新哈希替换旧提交的解决方案都行不通。

4

2 回答 2

0

请记住,使用 git-bisect 在决定树是否好之前,您基本上可以做任何事情。

因此,想到的一个解决方案是每次使用 git-apply 手动将带有第一个修复(可能使用 git-diff 生成)的补丁应用到工作树。

您可能需要在每次二等分后使用 git reset --hard 或类似方法清除补丁。

于 2012-10-09T01:14:53.510 回答
0

重写已经与其他开发人员共享的历史记录通常是不好的做法。你可能应该用你的错误修复做出一个新的提交,然后推送它而不是重写历史。

也就是说,是的,您可以修改过去的提交。假设我想在这里更改提交 B:

* 909debb (HEAD, master) C
* 5a12c7f B
* cfe7820 A

我最喜欢的方法是使用交互式变基。

% git rebase -i HEAD~2

这将打开一个编辑器,其中包含以下内容:

pick 5a12c7f B
pick 909debb C

pick将要更改edit的提交更改为:

edit 5a12c7f B
pick 909debb C

写文件。

% git rebase -i HEAD~2
Stopped at 5a12c7f... B
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

然后进行更改:

% git add <files>
% git commit --amend -m 'Updated B'
% git rebase --continue

现在我的历史看起来像这样:

* bf4a3a7 (HEAD, master) C
* b79ab6f Updated B
* cfe7820 A
于 2012-10-08T17:19:30.290 回答