【问题标题】:Finding the source branch of a merge commit查找合并提交的源分支
【发布时间】:2020-05-12 15:28:40
【问题描述】:

假设我有一个名为 feat 的功能分支,它已合并到 master 分支中:

master feat
  |     .
 (1)    .
  |\    .
  | \   .
  |  \  .
  |   \ .
  |    \.  <-- create branch `feat` from `master`
  |     |
  |     |
  |    (2) <-- make a commit on `feat`
  |    /
  |   /
  |  /
  | /
  |/
 (3) <-- merge `feat` into `master`
  |

如何从合并提交 (3) 中得知该提交的源分支是什么 (feat)?

我发现你可以通过运行git branch --contains &lt;commit&gt; 来获得一个给定提交哈希的分支名称列表,但是我仍然遇到的问题是我不知道源的最后一次提交的提交哈希分支(2)。

编辑:
不,Finding what branch a Git commit came from 没有回答我的问题。请阅读此问题的最后一段。

【问题讨论】:

  • 如果分支feat同时被删除了怎么办?通常这是不可能的,提交不与任何特定分支相关联。
  • 找到合并提交的父级将是微不足道的,但推断分支名称将是一个推测性的练习。
  • 您有提交哈希到合并提交中,例如Merge: a308437 ce271ef,提交消息包含分支名称。很难理解如何在没有所需信息的情况下进行合并提交。
  • 为什么要恢复原始分支的名称?你想通过获取那条信息来解决什么样的问题?
  • 现有的 CI 构建和部署系统在这里存在可悲(和/或严重)的缺陷。提交的唯一真正稳定名称是其哈希 ID。标签名称是按惯例稳定的。分支名称通常完全没用,因为从那时起该名称可能已被删除 - 更糟糕的是,它可能从那时起被重新用于其他用途。测试和部署应该通过哈希 ID,也许还有一些辅助数据库,以使这些对人类更方便(即 Git 标签的等价物或粗略等价物)。

标签: git git-branch git-merge git-commit


【解决方案1】:
git branch --contains HEAD^2 --merge |grep -v master

如果 HEAD 是来自您的架构的 (3) 提交, HEAD^2 将是 (2) 提交

git branch --contains HEAD^2 将显示提交的分支 使用 --merge 仅显示合并到您的分支中的那些,然后使用 grep -v master 删除主分支

使用提交 ID,这将是

git branch --contains baa46815a954779c78b722ade9d01a9da5781a58^2 --merge |grep -v master

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2018-08-24
    • 2018-05-10
    相关资源
    最近更新 更多