在过去24小时内添加到master的日志提交

Won*_*abo 7 git git-log

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

git log --format=format:%s --no-merges --since='24 hours ago'
Run Code Online (Sandbox Code Playgroud)

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

请注意我在干净的CI工作区中执行此操作,因此git reflog无法帮助我.

提前致谢!

ams*_*ams 5

我想rev-list这就是你想要的。

尝试这个:

git rev-list --no-merges '^<24-hour-old-commit>' HEAD
Run Code Online (Sandbox Code Playgroud)

那应该列出所有可以从 commitHEAD到达但不能从 commit 到达的非合并提交<24-hour-old-commit>

例如,在这个修订图中,它会列出大写的提交,而不是小写的:

a - b - c - 24h - H - i - J - K - HEAD
     \               /
      D - E - F - G '
Run Code Online (Sandbox Code Playgroud)

提交HJKHEAD都小于 24 小时。Commiti也更年轻,但被省略,因为它是一个合并提交。提交DEFG可能是任何年龄,但仅在过去 24 小时内合并,因此它们也被列出。


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

git rev-list -n1 --before="24 hours" --first-parent HEAD
Run Code Online (Sandbox Code Playgroud)

也就是说,“仅提供 1 个提交 ID,该 ID 必须至少存在 24 小时,并且位于当前分支上”。

把它们放在一起:

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

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

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