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