在过去的24小时内记录添加到主分支的提交日志

7

我正在尝试显示在过去24小时内添加到master分支的提交(不包括合并提交)。目前,我正在使用以下命令:

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

然而这样会有一个问题:如果提交时间早于 24 小时,但是在过去的 24 小时内已合并到 master 分支中,则命令将不会列出该提交。是否可能显示在最近 24 小时添加到 master 分支的提交,并且不包括最近 24 小时创建的提交?
请注意,我在干净的 CI 工作空间中执行此操作,因此无法使用 git reflog 命令帮助我。
提前感谢!

使用 --first-parent 代替 --no-merges 会更好吗? - ams
@ams 只会显示合并提交。我需要在过去 24 小时内添加到 master 分支的未合并提交。 - WonderCsabo
1个回答

6
我认为你需要的是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 的年龄也不超过 24 小时,但由于是合并提交,因此被省略了。提交记录 DEFG 的年龄可能很久远,但它们在最近 24 小时内已经被合并,因此也被列出。


在上述命令中,--max-age--since 选项将存在与 git log 相同的问题,但可以用于为您查找 <24-hour-old-commit>

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

这意味着,“只提供1个提交ID,该ID必须至少24小时以上,并且在当前分支上。”
将所有内容汇总起来:
git rev-list --no-merges HEAD \
             --not $(git rev-list -n1 --before="24 hours" --first-parent HEAD)

(Note: --not abcdef 是另一种说法 ^abcdef,除了它适用于所有后续参数,因此重新排序选项。) rev-list 的默认输出仅为原始修订版本,但您可以使用 --pretty 选项使其更像 git log--pretty=short 大致与您习惯的相同。

但编写脚本并不难 - 目前我不知道如何做,这也是我卡住的地方。您能详细说明一下吗?我认为这是一个棘手的任务,我们必须找到在过去24小时内添加到“master”的第一个提交... - WonderCsabo
我刚刚在查找这个。很快就会编辑。 :-) - ams
已添加信息,请测试并报告回来。 :-) - ams
谢谢!不幸的是,这也显示了非常旧的提交,包括4天前添加的。 - WonderCsabo
原回答中的问题已得到解决,现在已更新答案。 - ams
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接