我正在尝试在代码库中找到错误的来源。我有一个我怀疑导致破坏的提交的SHA,但我也知道错误开始出现的日期。我想检查给定提交何时合并到我们的主分支。
有一种简单的方法吗?
答案 0 :(得分:5)
git bisect
可以帮助您很好地找到错误。
https://www.kernel.org/pub/software/scm/git/docs/git-bisect.html
http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search
对于您要定位的提交SHA,只需在其上运行git log
,它就会告诉您有关提交的所有信息(日期,作者等)。在其上运行git log -p
以查看提交的更改。
答案 1 :(得分:2)
git branch --contains SHA1
应该打印包含给定提交的所有分支。
答案 2 :(得分:1)
您可以根据以下日期找到可疑提交:
git log --before=<date> -n 1
这个,或者之前一两天的某个日期,可能是git bisect
的“好”起点。
答案 3 :(得分:1)
我假设您的主分支是master
,并且您怀疑的SHA位于$SHA
。
首先,找到master
但不在$SHA
历史记录中的合并提交:
$ git log --merges --oneline $SHA..master
然后,测试每个合并提交以确定哪个包含$SHA
。让我们假设给定的合并提交ID在$MERGE
中。您可以使用master
列出此提交合并到git log --oneline $MERGE^..$MERGE
的所有提交。
(这可行,因为$MERGE^
是$MERGE
的[第一个]父级,即合并前master
的快照,因此$MERGE^..$MERGE
列出了$MERGE
中的提交{1}}但不在$MERGE^
中,即$MERGE
中的提交,但在合并之前不在master
中提交。)
然后,您可以grep
获取目标$SHA
:
$ git log --oneline $MERGE^..$MERGE | grep ^$SHA
第一次合并提交,它的任何输出都超过grep
是你的赢家。一旦确定了提交,您可以git show
获取更多信息。
$ git show $MERGE
如果有人知道的话,我会对更简单的方法感兴趣。