在git中查找跨越分支的标记的合并提交

Col*_*lin 11 git

我的产品是IntelliJ的插件.我支持基础IntelliJ平台的几个版本,并为每个版本发布我的插件的构建,因为它们的API经常在不同版本之间发生变化.这只是我的工作,所以我在master中开发,然后为每个其他版本维护一个分支.所以我的回购看起来像这样:

   1.6.0  1.6.1-eap1
.... a---b---c--- master
      \       \
       d-------e--- idea-2017.1
        \       \
         f-------g--- idea-2016.3
          \       \
          ...     ...  etc etc
Run Code Online (Sandbox Code Playgroud)

a是一个稳定的版本,并已被标记1.6.0.c是一个EAP(beta)版本,并已被标记1.6.1-eap1.这种方案适用于这两种情况.

偶尔我想创建一个不会进入发布渠道的开发版本,但是用户可以手动下载并测试他们是否喜欢.我想为每个平台生成一个开发版,因为开发用户可以使用任何IntelliJ版本.我能想到的最好的方法是为dev构建创建一个分支,比如标记1.6.0(提交a),然后从提交中创建相应的分支d,f依此类推,我可以将dev分支合并到其中并创建dev构建.

假设我想编写一个脚本来创建和维护这些分支,我怎样才能从标签中找到提交等d,f从而1.6.0创建dev构建分支?

max*_*630 1

a对于“在最早提交的不在其中和最早g的提交之间查找不在其中”的问题,解决方案是使用命令:idea-2016.3idea-2017idea-2017master

git log --oneline --source --ancestry-path  master idea-2017 idea-2016.3 --not 1.6.0
Run Code Online (Sandbox Code Playgroud)

历史上的输出与您的相同:

cf32d9f idea-2017 e
88f264c idea-2016.3 g
5bc9fa1 idea-2017 d
3f460fe idea-2016.3 f
224cac8 master c
67620cd master b
Run Code Online (Sandbox Code Playgroud)

然后找到标记为 的最新行idea-2016.3和标记为 的最新行idea-2017,这将是您的提交。

请注意,如果由于版本差异而存在某些阻止程序问题,则输出可能不理想,例如f在后续中修复的问题f'。所以我仍然会考虑显式标记。