我试图显示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无法帮助我.
提前致谢!
我想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)
提交H、J、K和HEAD都小于 24 小时。Commiti也更年轻,但被省略,因为它是一个合并提交。提交D、E、F和G可能是任何年龄,但仅在过去 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与您习惯的大致相同。