列出已合并到一个分支但未合并到另一个分支的Git分支列表

24

以下是分支/提交历史的示例图:

A---  master
|\
| B-----G--------P feature2
|\       \        \
| -----F--J--L--O--Q integration
|\    /     /  /
| C--E--H--K  /    feature1
 \           /
  D---------M feature3
在正常情况下,我们将集成分支合并到主分支中即可完成。但是...在某些特殊情况下,只有某些特定的功能必须合并到主分支中...例如:仅限于feature1。在这种情况下,将feature1分支合并到主分支中(提交R):
A-------------------------R   master
|\                       /
| B-----G--------P      /     feature2
|\       \        \    /
| -----F--J--L--O--Q  /       integration
|\    /     /  /     /
| C--E--H--K--/------         feature1
 \           /
  D---------M                 feature3

问题:我想要一个命令,告诉我哪些分支在集成中合并了,但没有在主分支(master)中合并。结果应该是:feature2和feature3。

是否只有这两个命令之间的交叉引用是唯一的方法?

git branch --no-merged master
git branch --merged integration
或者,它也可以是一个命令,列出在集成分支中但不在主分支中的合并提交。结果应为:J、O、Q。

11
ASCII艺术做得不错! - Adam Dymitruk
1个回答

20
 comm -12 <(sort <(git branch --no-merged master)) <(sort <(git branch --merged integration))

看起来当前版本的msysgit不支持进程替换...此外,git bash中的fc命令似乎是Unix版本的,而不是Windows版本的。 - Guillaume Morin
@GuillaumeMorin 尝试使用 which fc 命令查看正在使用的 fc 命令。如果这不是您想要的命令,您可以键入完整路径来运行“正确”的 fc 命令。 - Code-Apprentice
1
只需要快速添加一点 - “comm” 显然需要输入进行排序,因此这应该会给出正确的结果:comm -12 <(sort <(git branch --no-merged master)) <(sort <(git branch --merged integration)) - Paul Molodowitch
我们发现这在开发人员之间产生了相当不一致的结果。我们能够使用-r在两个分支命令上稍微缓解一下,并针对远程origin/master和origin/integration运行:comm -12 <(sort <(git branch -r --no-merged origin/master)) <(sort <(git branch -r --merged origin/integration)) - JamesWilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接