【发布时间】:2016-08-25 11:26:29
【问题描述】:
鉴于 master 分支历史中的提交 X,我想确定该提交包含在 master 中的合并。换句话说,我想找到最大的 i 使得 X 是 master~i 的祖先,即 i -th 的祖先沿着第一父链掌握。 (这假设合并到 master 将具有以前的 master 作为第一个父级,这通常是 afaik 的情况。)如何有效地完成?
示例
举个例子,假设我有以下历史:
A - B - C - D - E - F - G - H
\ \ / /
I -[J]- K - L - M
\ /
N - O - P
当我想知道J git 何时合并到master(上行)时,我希望命令返回F。因为从H 开始,只有第一父级的历史是H - G - F - E - …,而J 是F 的祖先,但不是E 的祖先。仅仅在J..H 范围内寻找最近的合并是不够的,因为我不想找到K 或L。这两者都不是H 的唯一父级历史的一部分,因为L 是F 的第二个父级。
【问题讨论】:
-
一次提交是时间上的快照,所以提交 X 只发生一次,并且不能由之前的提交引入。同样,上一次提交(特定变更集)中的
diff不太可能在其全部之前发生过。你的意思是 - 找到 X 之前的第一个合并提交,同时遵循 --first-parent 主线,这样你就可以看到当时带来了什么? -
@PhilipOakley:不,我不是这个意思。我已经编辑了我的问题,希望这能澄清我所追求的。当然,一次提交只发生一次,但它通常会在稍后的时间进入 master,即不是在提交时,而是在合并时。我想找到那个合并。不需要是最近的合并,因为最近的合并可能不在主线上。所以一个简单的
log --first-parent J..告诉我J在C之前与master 分歧,而一个简单的log --merges J..(正如你在回答中所建议的那样)告诉我K是J之后的第一个合并,所以两者都不是这些回答了我的实际问题。 -
在我的回答中添加了额外的注释 - 如果我有更多时间,我会尝试一些代码,但希望这些建议能让你到达那里。
标签: git version-control merge