在我们过去的某些时候,git的开发分支被合并了.但是,做出了错误的合并决定,因此有些代码没有进入我们预期会出现的主分支.(在最终合并到主分支之前,有多个不同分支的合并.因此分支和合并历史相当复杂.)
有没有一种简单的方法来搜索git存储库以确定哪个合并做出了"错误"的决定?
(我已经知道这个特例的答案,但找到它的过程有点乏味.)
编辑:git blame证明不合适的原因是在合并错误后的某个时间触及了行.
Git日志具有强大的搜索选项.由于有迹象表明您可能知道一大块代码消失了,您可以搜索该代码串
git log <HERE>..<THERE> -S"line I care about" --diff-filter=M
将从此处搜索到此处的字符串-S以及仅在修改(添加或删除)行的位置
如果使用-G而不是-S,则可以在搜索中获得更高的精度.-G提供正则表达式搜索,而不是使用-S进行字符串文字搜索.
如果您知道由git branch merge修改的文件中的一行,您可以执行'git blame file.txt'并确定提交哈希编号并提交文件中该行的作者.然后你可以浏览git日志并提取与坏分支合并相关的确切提交.
编辑:回应作者的评论,如果你正在寻找某一行的消失,那么'git diff'结合grep和二分搜索可能就是你想要的.假设你有0,1,2,3,4,5,6的提交号码.你知道该行存在于修订版0中,但在修订版6中消失了.使用'git diff'加上grep来搜索消失.
git diff 0 6 | grep '- line I care about'
Run Code Online (Sandbox Code Playgroud)
第一次迭代,你会看到你关心的线消失.然后将修订号减半,然后重试
git diff 0 3 | grep '- line I care about'
Run Code Online (Sandbox Code Playgroud)
如果grep仍显示该行消失(带有' - '符号),那么您就知道该行在版本0到3中消失了.如果grep 没有显示该行消失,则该行在修订版4-6中消失.
继续将修订版切成两半,直到找到罪魁祸首.