Git 查找合并提交的源分支

Git 查找合并提交的源分支,git,git-branch,git-merge,git-commit,Git,Git Branch,Git Merge,Git Commit,假设我有一个名为feat的功能分支,它被合并到master分支中: master feat | . (1) . |\ . | \ . | \ . | \ . | \. <-- create branch `feat` from `master` | | | | | (2) <-- make a commit on `feat` | / | / | / | /

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

master feat
  |     .
 (1)    .
  |\    .
  | \   .
  |  \  .
  |   \ .
  |    \.  <-- create branch `feat` from `master`
  |     |
  |     |
  |    (2) <-- make a commit on `feat`
  |    /
  |   /
  |  /
  | /
  |/
 (3) <-- merge `feat` into `master`
  |
大师壮举
|     .
(1)    .
|\    .
| \   .
|  \  .
|   \ .
|    \.  
如果HEAD是模式中的(3)个提交,
头^2
将是(2)个提交

git branch——包含头^2
将显示包含提交的分支 使用--merge只显示合并到分支中的分支,然后使用
grep-v master
删除主分支

对于提交id,这将是

git branch --contains baa46815a954779c78b722ade9d01a9da5781a58^2 --merge |grep -v master
如果HEAD是模式中的(3)个提交,
头^2
将是(2)个提交

git branch——包含头^2
将显示包含提交的分支 使用--merge只显示合并到分支中的分支,然后使用
grep-v master
删除主分支

对于提交id,这将是

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

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