我。 e.类似于
git branch --remotes --no-merged origin/master origin/prod origin/dev
- 但这样它会列出未合并到任何给定分支中的所有分支(列出未合并到任何给定分支中的分支)
如果您需要执行一次:
{ git branch --no-merged branch1; git branch --no-merged branch2 }|awk '++a[$0]==2'
您应该计算一下您编写了多少个分支命令,并调整 awk 行中的
2
。
如果您必须经常执行此操作,您可以编写一个小 shell 循环来接受分支名称,并在 awk 中使用动态“2”执行相同操作。
我最终得到了类似于以下内容的解决方案:
git branch --remotes --no-merged origin/master | \
grep --fixed-strings --invert-match --file=<( \
echo prod branch2 branch3 branchN | \
tr ' ' '\n' | \
xargs --replace \
git branch --remotes --merged origin/{} \
)
下面是对上述命令的不同部分的作用及其输出的解释:
$ echo prod branch2 branch3 branchN
prod branch2 branch3 branchN
- 简单地输出由空格分隔的给定分支的名称。
$ echo prod branch2 branch3 branchN | \
> tr ' ' '\n'
prod
branch2
branch3
branchN
- 输出相同,但每个分支都在新行上。
echo prod branch2 branch3 branchN | \
> tr ' ' '\n' | \
> xargs --replace \
> git branch --remotes --merged origin/{}
- 将为每个列出的分支调用
git branch
命令,如下所示:
git branch --remotes --merged origin/prod;
git branch --remotes --merged origin/branch2;
git branch --remotes --merged origin/branch3;
git branch --remotes --merged origin/branchN;
- 也就是说,它将列出 合并到给定分支中的所有远程分支(用换行符分隔),例如:
origin/some-branch-merged-into-prod
origin/branch2A-merged-into-branch2
origin/branch2B-merged-into-branch2
origin/some-other-branch-merged-into-branchN
git branch --remotes --no-merged origin/master
- 这将列出 未 合并到
origin/master
的所有分支,例如:
origin/some-branch-not-merged-into-any-given-branch
origin/branch2A-merged-into-branch2
origin/some-other-branch-merged-into-branchN
最后,整个命令将从 not merged 到
echo
的分支列表中排除 master
命令中给出的任何分支中的 merged分支列表 - 从而为我们提供未合并到的分支列表任何给定的分支,例如:
origin/some-branch-not-merged-into-any-given-branch
我猜问题已经问过
如果你想聚合分支, 只是:
git branch --no-merged origin/master > file
git branch --no-merged origin/xxx >> file
git branch --no-merged origin/yyy >> file
数出出现3次的那个...