如何检查分支机构是否没有合并?

时间:2017-07-18 16:02:32

标签: git merge branch

如何检查分支机构是否没有合并?具体来说,我想我想检查给定的基本提交和给定的目标提交之间没有合并提交。例如,我想检测这些情况何时发生:

target     o
          /|
         o |
          \|
           o
           |
base       o


target     o
           |
           |
           o
          /|
         / |
base     | o
         \ |
          \|
           o

2 个答案:

答案 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将包含提交foobaz,之前会提交该段提交。但是这些提交不是基础和目标之间的,因为它们不是基础提交quux的后代。

如果你想要考虑它们,请忽略--ancestry-path。如果不计算在内,请加--ancestry-path

答案 1 :(得分:0)

以下命令返回basetarget之间的所有合并提交。

git rev-list --merges base..target