4

我试图在我们的代码库中找到错误的根源。我有我怀疑导致损坏的提交的 SHA,但我也知道错误开始出现的日期。我想检查给定的提交何时合并到我们的主分支中。

有没有简单的方法可以做到这一点?

4

4 回答 4

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它以查看提交所做的更改。

于 2013-05-28T16:51:38.013 回答
2
git branch --contains SHA1

应该打印包含给定提交的所有分支。

于 2013-05-28T17:10:48.987 回答
1

您可以根据以下日期找到可疑提交:

git log --before=<date> -n 1

这,或者一两天前有约会的东西,可能是你的“好”起点git bisect

于 2013-05-28T18:59:11.267 回答
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但不在$MERGE^的提交,即在合并之前在$MERGE但不在的提交master。)

然后你可以grep为你的目标$SHA

$ git log --oneline $MERGE^..$MERGE | grep ^$SHA

第一个获得任何输出的合并提交grep是你的赢家。确定提交后,您可以git show获取更多信息。

$ git show $MERGE

如果有人知道的话,我会对一种更简单的方法感兴趣。

于 2015-12-05T15:05:47.590 回答