9

git branch -a --contains <hash>给了我所有那些包含hash. 我想要的是git branch -a --no-contains <hash>。不幸的是,似乎没有命令可以完成此操作,所以我认为解决方案类似于:

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

显示提交 A 已打开且未提交 B 的所有分支?似乎适用,但该方法似乎比必要的复杂。

完成上述任务的最佳/最简单方法是什么?

4

3 回答 3

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)
于 2012-05-22T19:17:56.413 回答
7

--no-contains标志是在Git 2.13中添加的。

于 2017-06-21T23:39:44.163 回答
3

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

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

| sortcomm: file 1 is not in sorted order如果警告打扰您,可以将其添加到两个命令的末尾。但是,这不是获得正确结果所必需的,因为两个输入的顺序是等价的。

于 2015-11-27T02:50:43.547 回答