我试图在我们的代码库中找到错误的根源。我有我怀疑导致损坏的提交的 SHA,但我也知道错误开始出现的日期。我想检查给定的提交何时合并到我们的主分支中。
有没有简单的方法可以做到这一点?
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
它以查看提交所做的更改。
git branch --contains SHA1
应该打印包含给定提交的所有分支。
您可以根据以下日期找到可疑提交:
git log --before=<date> -n 1
这,或者一两天前有约会的东西,可能是你的“好”起点git bisect
。
我假设您的主要分支是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
但不在$MERGE^
的提交,即在合并之前在$MERGE
但不在的提交master
。)
然后你可以grep
为你的目标$SHA
:
$ git log --oneline $MERGE^..$MERGE | grep ^$SHA
第一个获得任何输出的合并提交grep
是你的赢家。确定提交后,您可以git show
获取更多信息。
$ git show $MERGE
如果有人知道的话,我会对一种更简单的方法感兴趣。