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?似乎适用,但这种方法似乎比必要的更复杂。
实现上述目标的最佳/最简单方法是什么?
答案 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
标记。