我试图找到存在于一个分支中但不存在于另一个分支中的所有提交。看下图,我想知道 B2 中有什么不在 B1 中。当我尝试以下命令时:
git rev-list B2 ^B1
我只取回提交 c2,即使 c1 在进入 B1 之前已恢复。有没有办法检测这种情况,以便同时取回 c1 和 c2,因为它们的更改在技术上不包含在 B1 中?
我试图找到存在于一个分支中但不存在于另一个分支中的所有提交。看下图,我想知道 B2 中有什么不在 B1 中。当我尝试以下命令时:
git rev-list B2 ^B1
我只取回提交 c2,即使 c1 在进入 B1 之前已恢复。有没有办法检测这种情况,以便同时取回 c1 和 c2,因为它们的更改在技术上不包含在 B1 中?
对你的图表做一些假设——具体来说,在对角线连接顶线的点有一个合并提交c1
——提交字面意思是在分支中B1
。诸如B2 ^B1
使用提交图(由提交及其后向链接组成的 DAG)之类的操作来查找提交。他们完全忽略了这些提交中的快照;他们只是在提交图上走。
确实,除此之外C1
,还有另一个提交,也包含在 branchB1
中,实际上是 un-does C1
。您无法轻易找到,因为 Git 不会自行存储该信息。您当然可以将该信息放入,例如,提交消息中,并编写您自己的代码来遍历其中包含的提交列表,B1
以查看是否存在具有此类日志消息的提交,但这是您必须做的事情,而不是什么Git会自己做。
(在我看来,这可能是一个XY 问题。也就是说,也许您不想要提交列表,而是比较分支的提示提交快照,B1
并且B2
可能应用了一些过滤。)