git查看已合并分支的fork点
一个问题
有些需求有好几期,做后面几期的可能完全不了解前几期做了什么,拿到分支号后,就需要找到最初的commit点。由于这个分支已经merge到了master上,所以找最近的ancestor就不对了。
1 | git merge-base branch1 branch2 //只能找到最近的祖先 |
那么如何找到这个分支最初的fork点呢,下面给出两种方案,亲测有效。
解决方案
git 别名
1 | git config --global alias.oldest-ancestor '!zsh -c '\''diff -u <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | sed -ne "s/^ //p" | head -1'\'' -' |
上述三个命令就可以找到最初的commit点,以及这个分支做了什么。参见stackoverflow
上的回答: Finding a branch point with Git? - Stack Overflow
git分支图
如果你使用zsh
, 内置的有两个相关的命令glgg
,glgga
.
glgg
: 显示当前分支的分支图
1 | ➜ ~ alias glgg |
glgga
: 显示所有分支的分支图
1 | ➜ ~ alias glgga |
从分支图中可以快速的看出当前分支是在哪里fork出来的
分支图的显示方式
reverse chronological: 默认显示方式,会按照commit的时间,逆序显示
topo order: 按照commit的拓扑顺序显示,子提交在父提交之前显示
查看fork点的时候,最好是按照拓扑排序显示,这样分支图不会很乱,便于找到。
可视化工具
可视化工具和git log的用法是一样的,顺着查找即可。这里我用idea
为例:
开启InteliSort后,注意红框勾上。
开启后是按照提交排序的,并没有按照插入的时间,这样可以清楚的顺着提交找到最初的fork点。