如何列出未合并到给定分支的`git`分支?

问题描述 投票:0回答:3

我。 e.类似于

git branch --remotes --no-merged origin/master origin/prod origin/dev
- 但这样它会列出未合并到任何给定分支中的所有分支(列出未合并到任何给定分支中的分支)

linux bash git
3个回答
3
投票

如果您需要执行一次:

{ git branch --no-merged branch1; git branch --no-merged branch2 }|awk '++a[$0]==2'

您应该计算一下您编写了多少个分支命令,并调整 awk 行中的

2

如果您必须经常执行此操作,您可以编写一个小 shell 循环来接受分支名称,并在 awk 中使用动态“2”执行相同操作。


1
投票

解决方案

我最终得到了类似于以下内容的解决方案:

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

0
投票

我猜问题已经问过

如何知道某个分支是否已经合并到master中了?

如果你想聚合分支, 只是:

git branch --no-merged origin/master > file
git branch --no-merged origin/xxx >> file
git branch --no-merged origin/yyy >> file

数出出现3次的那个...

© www.soinside.com 2019 - 2024. All rights reserved.