如何检查分支机构是否没有合并?具体来说,我想我想检查给定的基本提交和给定的目标提交之间没有合并提交。例如,我想检测这些情况何时发生:
target o
/|
o |
\|
o
|
base o
target o
|
|
o
/|
/ |
base | o
\ |
\|
o
答案 0 :(得分:2)
答案最终非常简单。您可能也可能不想在此--ancestry-path
:
git rev-list base..target --merges --count
(或base^@..target
来检查base
本身,但可能你不想检查base,这可能是允许合并的。)
作为一般规则,我们几乎总是希望git rev-list
枚举提交。此命令或多或少是git log
的管道等价物。我们想要的范围是“所有可以从目标到达的提交,不包括从基础可到达的所有提交”,因此base..target
。
接下来,您只想枚举此列表中的 merges 。所以我们添加--merges
,它不会影响修订版的行走,但是除了合并提交(提交两个或更多父母)之外,确实避免列出任何内容。
我们并不关心哪些提交是合并。我们只是想知道是否有。因此,如果我们得到合并计数,而不是合并列表,那就足够了。添加--count
告诉git rev-list
生成计数而不是列表。
如果结果不为零,则有合并。
是否使用--ancestry-path
的问题是您可以回答的问题。考虑:
o (target) commit blah
|\
o | commit bar
| o commit foo
o | (base) commit quux
| o commit baz
: |
: :
列表base..target
将包含提交foo
和baz
,之前会提交该段提交。但是这些提交不是基础和目标之间的,因为它们不是基础提交quux
的后代。
如果你做想要考虑它们,请忽略--ancestry-path
。如果不计算在内,请加--ancestry-path
。
答案 1 :(得分:0)
以下命令返回base
和target
之间的所有合并提交。
git rev-list --merges base..target