【发布时间】:2014-07-22 11:26:11
【问题描述】:
我想使用 gitk 比较 2 个分支,而没有其他分支历史的混乱。
我可以通过 gui 实现这一点:视图 > 新视图 > 分支和标签:v0.8.x v0.9.x
我尝试了以下方法,但它仍然显示所有分支:gitk --branches v0.8.x v0.9.x
正确的语法是什么?
【问题讨论】:
我想使用 gitk 比较 2 个分支,而没有其他分支历史的混乱。
我可以通过 gui 实现这一点:视图 > 新视图 > 分支和标签:v0.8.x v0.9.x
我尝试了以下方法,但它仍然显示所有分支:gitk --branches v0.8.x v0.9.x
正确的语法是什么?
【问题讨论】:
我无法使--branches[=<pattern>] 参数起作用(对于任何shell glob,尤其是对于多个glob)。幸运的是,您可以使用一大堆 unix 管道来完成同样的工作。
git branch -r | egrep "origin/(testing|prod|dev)" | xargs | tr '\n' ' ' | xargs -I {} bash -c 'gitk {}'
细分:
git branch -r -- 显示所有远程分支
egrep "origin/(testing|prod|dev)" -- 过滤以testing*、prod* 或dev* 开头的那些。
第一个xargs——修剪的简单方法
tr '\n' ' ' -- 将所有结果合并到一个空格分隔的行中
xargs -I {} bash -c 'gitk {}' -- 将该行通过管道传输到 gitk
【讨论】:
--branches=bugfix/* 以外的东西时,gitk --branches=... 存在太多可用性问题。
gitk v0.8.x v0.9.x 为我做这件事。
但是,仔细查看显示的分支,我发现实际上没有显示给定的分支。此外,还显示了两个分支历史中所有指向一次提交的分支。
因此,该命令显示所有指定的分支,包括那些是指定分支的直接祖先的分支。
编辑:
如果您想查看所有名为fix/* 的分支,将使用--branches= 开关:
gitk --branches=fix/*
会显示与给定 shell glob 匹配的所有分支。
另请参阅gitk 的文档以获得更深入的解释。
【讨论】:
master 和feature,使用--all 显示所有分支
limit refs to ones matching given shell glob。因此,如果您可以使用 glob 模式表示要显示的两个分支,则可以将其用作 --branches 的参数。如果不是,则不是。如果它们不能使用 glob 模式表达,请坚持 OP 描述的内容:View > New view > Branches & tags: master feature