git 分支标志为 --no-merged 而不是 --contains?

Wil*_*ard 4 git git-branch

git branch --contains mastermaster返回可到达其尖端的分支的名称。

git branch --merged master返回其尖端可从 到达的分支的名称master

git branch --no-merged master返回其尖端无法从 到达的分支的名称master

git用于显示其尖端既不能从 到达master,也不能master在其自己的祖先中到达的分支名称的标志是什么(可能在 的较新版本中?)?换句话说,哪个标志给出了 的效果--no-merged --no-contains

换句话说,如何显示既不能快进合并到 master 也不能快进合并到 master 的分支?

Von*_*onC 5

2017 年 4 月更新,正如我在“如何列出包含提交的所有 git 分支”中提到的,Git 2.13 现在支持--no-contains该选项。

原答案

标志是什么(也许在较新版本的 git 中?)

首先,--(no-)merged您提到的标志最近已被概括为 ref-filter (git 2.7,2015 年 9 月)

--no-contains

快速搜索发现此选项不存在(在 git 存储库的任何分支中:

MINGW64 ~/git/git (master)
$ git branch -a | tr -d \*|grep -v origin|xargs git grep --break --heading --line-number 'no\-contain'
Run Code Online (Sandbox Code Playgroud)

因此,您需要编写脚本,列出未选择的所有分支--contains(但在 中列出--no-merged)。

git tag/branch/for-each-ref”系列命令长期以来允许通过以下方式过滤参考:

  • --contains X”(仅显示 的后代的引用X),
  • --merged X”(仅显示 的祖先的引用X),
  • --no-merged X”(仅显示不是祖先的引用X)。

其中添加了一个奇怪的遗漏“ --no-contains X”(仅显示不是 后代的引用)。X