我对一个文件进行了修复并提交到了我的git代码库中。之后的一段时间,我发现这个问题又出现了。我想知道哪次提交将修复内容删除了,所以我尝试使用了git bisect和git log --all -S TERM(其中"TERM"是我修复时添加的字符串,在整个项目中都没有出现过)。结果发现git bisect找错了提交,而git log --all -S TERM只列出了我添加TERM的提交,并没有列出删除它的任何提交,尽管在master分支中它已经不再存在了。在手动查找一番之后,我发现在两个分支之间进行了一次合并提交。一个分支有我的修复,而另一个分支没有。合并的作者选择了没有我的修复的分支(奇怪的是,在这个文件中没有冲突),我的问题如下:
1.git bisect为什么无法找到合并更改?我在manpage中没有看到有关此限制的任何信息。有没有一种不同的使用方式,可以找到上述情况下的坏合并?
2.git log --all -S TERM为什么没有列出合并提交?manpage说它会列出“引入或删除实例”的提交。那个合并提交没有删除我的字符串吗?有没有一种不同的使用方式,可以找到上述情况下的坏合并?
3.如果git bisect和git log -S在上述情况下无用,那么找到坏的合并的有效方法是什么?没有这些工具,跟踪问题花费了我相当长的时间。
1.git bisect为什么无法找到合并更改?我在manpage中没有看到有关此限制的任何信息。有没有一种不同的使用方式,可以找到上述情况下的坏合并?
2.git log --all -S TERM为什么没有列出合并提交?manpage说它会列出“引入或删除实例”的提交。那个合并提交没有删除我的字符串吗?有没有一种不同的使用方式,可以找到上述情况下的坏合并?
3.如果git bisect和git log -S在上述情况下无用,那么找到坏的合并的有效方法是什么?没有这些工具,跟踪问题花费了我相当长的时间。
bisect
找到真正的罪犯? - Richrev-list
和bisect
中结合使用--ancestry-path
。虽然我不确定你是否可以同时使用两者,但如果可以的话,应该能够找到抹去你更改的第一个合并。 - CB Bailey