如何判断给定提交何时进入分支?

时间:2013-05-28 16:49:56

标签: git

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

有一种简单的方法吗?

4 个答案:

答案 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

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