是否可以在 git 日志中枚举提交?

Is it possible to enumerate commits in git log?

我经常需要 squash 将许多小提交变成一个大提交,以便从开发功能分支合并到 master。所以我

git rebase -i HEAD~X

其中 X 是最新提交压缩的数量。然而,由于我有时要处理几十个提交,我必须在 git log 中手动计算它们,我试图避免这种情况。

有没有办法生成一个 git 类似日志的报告,除了显示提交的 SHA 之外,还会枚举它们 0-n?

你可以这样做

git rebase -i <sha>

(其中 <sha> 是要变基的最后一次提交的父项)

git rebase -i <sha>~

(其中 <sha> 是要变基的最后一次提交)。


回到你最初的问题,我认为没有办法做到这一点。因为 SHA 是 git 世界中的第一个 class 公民,并且 ^~ 语法恰好用于返回已知的少量提交。当您不知道提前返回的步骤数时,使用此语法就没有任何意义。因此,我认为 git log 没有任何枚举提交的方法,仅仅是因为我想不出它的任何用例;总是可以使用 SHA。

就是说,当然没有人可以阻止您使用任何外部工具(感谢 Unix)执行 git log --pretty=oneline 和编号行,例如awknl 或任何你喜欢的。

尝试:

$ git log --pretty=format:"%h" @{3}..| nl -v0
 0  da15a22
 1  64e0e39
 2  33fa834

并将 3 替换为自 HEAD 以来所需的提交次数。