git: 如何获取有关分支合并到另一个分支的更多信息(何时,sha)?

git: How to get more information (when, sha) about a branch merging into another?

我发现 git branch -r --merged master 看到所有分支都合并到 master

我们的流程很标准:开发==功能分支-->开发==发布分支-->主控(“==”从创建分支;“-->”PR进入)

我想找出分支合并的时间(或最新的 sha),以便生成自上次 PR 合并到 master

后合并的分支列表

理想情况下,我们会有每个发布分支的清单

干杯

"git branch" 可能是这项工作的错误工具:它只会告诉你仍然存在的分支,而合并的功能分支并不是你特别需要的东西。

它对“合并”的定义也不能告诉你“什么时候”——它只是意味着至少有一条从“主”向后工作的路径可以让你到达该分支的当前尖端。 (提交永远不会真正“在”git 中的分支上;分支仅作为指向单个提交的指针存在,并从那里指向其整个历史记录。)

解决这个问题的另一种方法是:

git log --first-parent master..develop

只要进入 develop 的 only 提交是合并提交 - 没有快进合并或直接提交到该分支 - 这将为您提供它们的列表。

  • --first-parent 停止列出合并的每个功能的单独提交。
  • master..develop 表示法大致表示“开发中的所有内容不在主控中”。 (同样,“on”实际上意味着“可以从当前的提示到达”。)

您可以使用 --pretty 选项来自定义此处显示的内容。我经常将它与 --pretty='format:%s' 一起使用,它只显示合并提交上的提交消息。

我找到了适合我的解决方案:

我将发布分支相互比较

import sys
from subprocess import run, PIPE, CompletedProcess

if len(sys.argv) > 1:
    branch1 = sys.argv[1]
else:
    branch1 = "master"

if len(sys.argv) > 2:
    branch2 = sys.argv[2]
else:
    branch2 = "develop"


base_command = ["git", "branch", "-r", "--merged"]

branch2_command = base_command + [branch2]
process_result : CompletedProcess = run(branch2_command, stdout=PIPE, check=True)
branch2_result = process_result.stdout.decode("utf-8")
branch2_list = branch2_result.split()

branch1_command = base_command + [branch1]

process_result : CompletedProcess = run(branch1_command, stdout=PIPE, check=True)
branch1_result = process_result.stdout.decode("utf-8")
branch1_list = branch1_result.split()


result = [item for item in branch2_list if item not in set(branch1_list)]

print(branch2 + " minus " + branch1 + " is\n" + "\n".join(result))

如果我将 origin/release/1 与 origin/release/2 进行比较,我会在 release/2

中得到新内容

干杯