我正在使用Git v2.6.1。我在两个分支上运行以下命令:
$ git log --drecorate --oneline --graph origin/release/6.0.0.10...origin/master --ancestry-path
分支release/6.0.0.10
是由master
创建的。但是,生成的图形不会显示其合并基础。它们在结果视图中没有“连接”:
* c62ea9b (origin/release/6.0.0.10)
|\
| * 43922fe
|/
* 6bb6187
* ff01d1e
* 3e949a9
* af6a5a8
* 6adff8d
* 4896edc
* bbebbf1
* 54c12e7
* 0b198c5 (origin/master)
* 33b1f9d
* 0e6c2a0
* 86371fe
* 3e341f4
* 3bbb8f4
* 05c3987
* 6688d10
* 2d6c270
* 18c36f3
注意合并基础不 origin/master
的提示,但它会以这种方式显示。我希望看到另一条垂直线,可能在底部,将2个参考线连接在一起,这将表明它们的合并基础。如何更改上面显示的log
命令的调用以获得我正在寻找的结果?
答案 0 :(得分:0)
三点语法选择可从任一端点访问的修订,排除两个端点可以访问的提交。也就是说,它抛弃了合并基础和任何早期的点。显然,您需要包含合并基础以绘制图形线。
两个明显的选择是:
从合并库中备份一步。这不能直接在三点语法中完成;您必须找到实际的合并基础提交。 1 因为A...B
"表示" 2 A B --not $(git merge-base A B)
你可以这样做:
base=$(git merge-base A B)
git log A B --not ${base}^
获得这种效果。
使用--boundary
选项git rev-list
3 强制它包含它通常排除的边界提交,在这种情况下将包括合并库
我不完全确定--boundary
将如何与--ancestry-path
进行互动,在这种情况下(对git repo本身的测试给了我两个边界提交我试过的DAG的碎片)。不过,我在不同的repo上使用的--simplify-by-decoration
选项工作正常。
1 或者其中一个,如果有多个合并基础(在这种情况下你可能想要包括所有这些,但可能在这里你可以确定那里只是一个)。
2 更确切地说,A B ^$(git merge-base A B)
或A B --not $(git merge-base A B) --not
。额外的--not
或使用前缀^
在这种情况下并不重要,因为--not
没有更多的修订名称可以反转。
3 log,rev-list,几乎都是相同的命令。 :-)例如,您可以从git rev-list
中获取图表。