2015-10-16 32 views
7

我试图显示在过去24小时内已添加到master分支的提交(不包括合并提交)。目前我使用此命令为:在过去24小时内向主人添加的日志提交

git log --format=format:%s --no-merges --since='24 hours ago' 

但是这有一个问题:如果提交的超过24小时,但合并到在过去的24小时内master分支,该命令将不会列出提交。是否有可能在过去24小时内向master分支显示提交,而不是在过去24小时内创建的提交?

请注意我在一个干净的CI工作区执行此操作,所以git reflog不能帮助我。

在此先感谢!

+0

而不是'--no-merges',可能' - first-parent'会更好吗? – ams

+0

@ams只会显示合并提交。我需要未合并的提交,在过去24小时内添加到'master'分支。 – WonderCsabo

回答

3

我认为rev-list是你想要的。

试试这个:

git rev-list --no-merges '^<24-hour-old-commit>' HEAD 

这应该列出所有的非合并提交是从提交HEAD到达的,但是从提交<24-hour-old-commit>不可达。

例如,在这个版本图,它会列出大写承诺,但不是小写:

a - b - c - 24h - H - i - J - K - HEAD 
    \    /
     D - E - F - G ' 

提交HJKHEAD都是年轻的24小时以后。提交i也是比较年轻的,但是由于它是合并提交而被忽略。提交D,E,FG可能是任何年龄,但只在过去24小时内合并过,因此它们也被列出。


在上面的命令,--max-age--since选项都会有相同的问题,因为你有git log,但它们可以被用来寻找<24-hour-old-commit>为您提供:

git rev-list -n1 --before="24 hours" --first-parent HEAD 

也就是说,“给只有1个提交ID,必须至少24小时,并且位于当前分支“。

全部放在一起:

git rev-list --no-merges HEAD \ 
      --not $(git rev-list -n1 --before="24 hours" --first-parent HEAD) 

(注:--not abcdef是另一种说法^abcdef但它适用于所有以下参数,因此重新排序的选项。)

默认输出rev-list只是原始版本,但您可以使用--pretty选项使其更像git log--pretty=short与您习惯的大致相同。

+0

但它不会很难脚本 - 目前我不知道如何,这是我也卡在哪里。你介意阐述吗?我认为这是一个棘手的任务,我们必须找到在过去24小时内添加到'master'的第一个提交... – WonderCsabo

+0

我只是看着那个。尽快编辑。 :-) – ams

+0

添加的信息,请测试并回报。 :-) – ams

相关问题