获取合并提交的合并分支名称

3

Git是一款写得非常好的软件,你可以长时间使用它而不真正了解发生了什么。

我正在尝试获取最近与主分支合并的分支名称,但我似乎在使用git log、git show等命令时没有进展。

当我查看提交到主分支的提交时,Github有分支名称历史记录,但我想知道这是否是github额外跟踪的内容而不是我可以通过git访问的内容。任何帮助都将不胜感激!


4
除默认的合并信息(merge branch Bmerge branch B into T)外,Git 不会在任何地方保存此信息。分支名称是可移动和可删除的,因此如果名称已被移动或删除,则无法找到此信息。 - torek
1
分支仅是名称。合并只涉及提交,即使(是的,这个比喻可能会让人感到困惑),我们经常使用分支名称来引用它们。 - Romain Valeri
我明白了,所以我能够区分合并的类别的唯一方式,就是在描述中添加一些标识符?因为我可以从git日志中获得那个字符串。 - 1233023
你为什么需要知道最初使用的分支名称呢? - Lasse V. Karlsen
我希望根据分支合并的类型运行不同的部署脚本。 - 1233023
2个回答

2

正如评论所述,此信息未被记录。

您可以考虑使用post-merge hook,例如此钩子,它将:

  • 获取刚刚合并的分支(通过git reflog
  • 使用git notes add来为当前合并提交添加所需的信息。
    这样就不需要修改描述/合并提交消息了。

然而,这是一个本地钩子,需要在每个克隆的存储库上安装。如果您是唯一在存储库上工作的人,那么这将起作用。


0

正如@torek在评论中提到的那样,您可以在合并提交本身中使用消息。

#!/bin/bash
commit_subject=$(git log -1 --pretty=format:%s)
echo Commit subject: $commit_subject

regex='Merge pull request #[0-9]+ from .+/(.+)$'
[[ $commit_subject =~ $regex ]]
branch_name=${BASH_REMATCH[1]}
echo Merged branch: $branch_name

示例输出:

Commit subject: Merge pull request #2574 from RepoName/BranchName
Merged branch: BranchName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接