使用 rebase -i 确定已压缩的提交

Identify commits that have been squashed using rebase -i

我想知道是否有可能确定给定项目中已重新定位和压缩的提交数量。我可以满足于所有的变基,而不仅仅是那些执行壁球的变基。

我实际上是在尝试编写一个函数来计算用户对给定项目 运行 的变基次数。

例如,如果我有一个包含三个提交的项目,这些提交具有以下哈希 123456789999。 我希望能够确定提交 1234 最初是提交 11112222 但被重新设置并压缩在一起以进行提交 1234.

同样,我可以找到 运行 git log | grep -i merge.

通过合并创建的提交

理想情况下,这将是类似于刚才提到的命令的一行。

根据我自己的经验,将两个或多个提交压缩为一个会导致变基提交包含所有由换行符连接的提交消息(假设 none 的提交消息在变基期间被编辑)。有了这些信息,这似乎是不可能的。然而,我问是因为我很想能够做到这一点,因为它将极大地帮助我的项目。

TLDR:一个用于查找由变基创建的提交的行。 Git 是否做了任何特殊的事情来标记重新定位的提交?

我能够使用 git reflog 完成此任务。

git reflog 给了我所有的操作 包括 rebases

典型输出如下:

some-computer:test_project marcusshepherd$ git reflog
On branch master
nothing to commit, working directory clean
47066c8 HEAD@{0}: rebase -i (finish): returning to refs/heads/master
47066c8 HEAD@{1}: rebase -i (squash): add bar.txt
ae35743 HEAD@{2}: rebase -i (start): checkout HEAD~2
7c5b185 HEAD@{3}: commit: edit bar.txt
ae35743 HEAD@{4}: commit: add bar.txt
a9b6aa1 HEAD@{5}: commit (initial): init

根据这些信息,我能够找到同时包含字符串 rebasefinish 的所有命令,然后对它们进行计数。这为我提供了任何给定项目的正确数量的 rebase。

必须说我很高兴解决了这个问题。