当前位置:  开发笔记 > 开发工具 > 正文

如何搜索git存储库历史记录以查找合并错误?

如何解决《如何搜索git存储库历史记录以查找合并错误?》经验,为你挑选了4个好方法。

在我们过去的某些时候,git的开发分支被合并了.但是,做出了错误的合并决定,因此有些代码没有进入我们预期会出现的主分支.(在最终合并到主分支之前,有多个不同分支的合并.因此分支和合并历史相当复杂.)

有没有一种简单的方法来搜索git存储库以确定哪个合并做出了"错误"的决定?

(我已经知道这个特例的答案,但找到它的过程有点乏味.)

编辑:git blame证明不合适的原因是在合并错误后的某个时间触及了行.



1> Jakub Narębs..:

没有更多细节,我只能暗示可能的解决方案.如果您知道受影响的文件或行,您可以尝试使用git-blame(git blame *file*,或git blame *revision* *file*),或者您可以使用git-log尝试所谓的' pickaxe search' ,即尝试查找引入给定行的修订版,或删除给定行.您可以查找并检查所有合并,例如通过,并检查它们与父项的关系(向所有父项显示差异;或者显示组合差异,但不显示简单的合并更改,即如果采取了一方).git log -S'*line*git log -p -m --grep=Merge-m-c



2> jfs..:

在您的案例中可以git-bisect帮助吗?



3> Matthew McCu..:

Git日志具有强大的搜索选项.由于有迹象表明您可能知道一大块代码消失了,您可以搜索该代码串

git log .. -S"line I care about" --diff-filter=M

将从此处搜索到此处的字符串-S以及仅在修改(添加或删除)行的位置

如果使用-G而不是-S,则可以在搜索中获得更高的精度.-G提供正则表达式搜索,而不是使用-S进行字符串文字搜索.



4> Ross Rogers..:

如果您知道由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'

第一次迭代,你会看到你关心的线消失.然后将修订号减半,然后重试

git diff 0 3 | grep '- line I care about'

如果grep仍显示该行消失(带有' - '符号),那么您就知道该行在版本0到3中消失了.如果grep 没有显示该行消失,则该行在修订版4-6中消失.

继续将修订版切成两半,直到找到罪魁祸首.


您描述的过程就是git bisect所做的.但是,您不必计算哈希值.虽然您的0-6,0-3/4-6等模式清晰易懂,但您无法使用提交编号.您必须使用提交哈希值,这一点并不清楚.git bisect是你的朋友.
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有