显示不包含提交的分支

时间:2012-05-22 17:55:58

标签: git branch dvcs

git branch -a --contains <hash>为我提供了包含hash的所有分支。我想要的是git branch -a --no-contains <hash>。不幸的是,似乎没有完成此任务的命令,因此我认为解决方案类似于:

git branch -a | grep -v output of(git branch -a --contains)但我的bash不能胜任这项任务。

Show all branches that commit A is on and commit B is not on?似乎适用,但这种方法似乎比必要的更复杂。

实现上述目标的最佳/最简单方法是什么?

3 个答案:

答案 0 :(得分:12)

grep有一个-F选项,可以匹配固定字符串。对你正在做的事情有用。

git branch -a | grep -vF "$(git branch -a --contains <hash>)"

不幸的是,-F将过滤掉具有部分匹配的分支名称。正如antak所建议的,我们可以使用comm代替更可靠的差异。

git branch -a | sort | comm -3 - <(git branch -a --contains <hash> | sort)

答案 1 :(得分:2)

如果分支名称部分匹配,则接受的答案将会发生冲突,这里是处理这种情况的答案。

git branch -a | comm -3 - <(git branch -a --contains <hash>)
如果| sort警告扰乱了您,可以在两个命令的末尾添加

comm: file 1 is not in sorted order。但是,这不是获得正确结果所必需的,因为两个输入的顺序是等效的。

答案 2 :(得分:2)

Git 2.13中添加了--no-contains标记。