首页 > 解决方案 > 运行 git rev-list B2 ^B1 时有没有办法识别恢复的提交?

问题描述

我试图找到存在于一个分支中但不存在于另一个分支中的所有提交。看下图,我想知道 B2 中有什么不在 B1 中。当我尝试以下命令时:

git rev-list B2 ^B1

我只取回提交 c2,即使 c1 在进入 B1 之前已恢复。有没有办法检测这种情况,以便同时取回 c1 和 c2,因为它们的更改在技术上不包含在 B1 中?

比较两个分支之间的恢复提交

标签: gitbranchgit-rev-list

解决方案


对你的图表做一些假设——具体来说,在对角线连接顶线的点有一个合并提交c1——提交字面意思在分支中B1。诸如B2 ^B1使用提交图(由提交及其后向链接组成的 DAG)之类的操作来查找提交。他们完全忽略了这些提交中的快照;他们只是在提交图上走。

确实,除此之外C1,还有另一个提交,也包含在 branchB1中,实际上是 un-does C1。您无法轻易找到,因为 Git 不会自行存储该信息。您当然可以将该信息放入,例如,提交消息中,并编写您自己的代码来遍历其中包含的提交列表,B1以查看是否存在具有此类日志消息的提交,但这是您必须做的事情,而不是什么Git会自己做。

(在我看来,这可能是一个XY 问题。也就是说,也许您不想要提交列表,而是比较分支的提示提交快照,B1并且B2可能应用了一些过滤。)


推荐阅读