考虑这个例子git仓库。
我们创建了一个名为
运行命令
图表如果长这样会更简单:
据我所知,原因是
1.有没有办法说服
2.假设
#!/bin/bash -e
rm -rf example
git init example
cd example
echo 0 > file.txt
git add file.txt
git commit -am "initial commit"
git branch branch1
echo 1 > file.txt
git commit -am "1 (on master)"
git branch branch2
git checkout branch1
echo 2 > file2.txt
git add file2.txt
git commit -m "2 (on branch1)"
git merge --no-edit master
echo 3 > file2.txt
git commit -am "3 (on branch1)"
git checkout master
echo 4 > file.txt
git commit -am "4 (on master)"
git checkout branch1
git merge --no-edit master
echo 5 > file2.txt
git commit -am "5 (on branch1)"
git checkout master
git merge --no-edit --no-ff branch1
git log --graph --oneline
我们创建了一个名为
branch1
的分支,从 master
分支合并了几次,最后再次合并回 master
。运行命令
git log --oneline --graph
会显示出奇怪扭曲的图形。* 2c3b97a Merge branch 'branch1'
|\
| * 1d722df 5 (on branch1)
| * 54039b6 Merge branch 'master' into branch1
| |\
| |/
|/|
* | d80d82c 4 (on master)
| * 2399286 3 (on branch1)
| * 9a0cb38 Merge branch 'master' into branch1
| |\
| |/
|/|
* | 31df841 1 (on master)
| * 5809072 2 (on branch1)
|/
* 08fc7a6 initial commit
图表如果长这样会更简单:
* 2c3b97a Merge branch 'branch1'
|\
| * 1d722df 5 (on branch1)
| * 54039b6 Merge branch 'master' into branch1
|/|
* | d80d82c 4 (on master)
| * 2399286 3 (on branch1)
| * 9a0cb38 Merge branch 'master' into branch1
|/|
* | 31df841 1 (on master)
| * 5809072 2 (on branch1)
|/
* 08fc7a6 initial commit
据我所知,原因是
git log
总是更喜欢在右侧显示每个合并提交的“第二个父级”,因此对于每个合并提交,它必须向右蛇行。(“第二个父级”是正在合并的分支,“第一个父级”是我们要合并到的分支。)1.有没有办法说服
git log
生成我想要的简单图形?这里有一个2013年的旧gist提出了修复这个问题的建议(“让我指定哪些分支沉到左边”;那里还有其他有趣的想法),但我没有看到任何进展。2.假设
git log
无法自然地完成,是否有另一个git提交图形工具/库可用于制作像这样的图形?
re
,因此不需要它。(2) 我建议使用git rev-list --parents
而不是git log --pretty=format...
,虽然你需要添加HEAD
作为默认值并自己缩写 rev-id(但这可能是个好主意,因为你可以确定唯一缩写的最小值)。拆分将首先按换行符进行,然后按空格进行,以获取提交及其父集。(3) 可能很酷的是让 Python 代码直接运行 dot,然后打开一个窗口或浏览器... :-) - torek