一个问题

有些需求有好几期,做后面几期的可能完全不了解前几期做了什么,拿到分支号后,就需要找到最初的commit点。由于这个分支已经merge到了master上,所以找最近的ancestor就不对了。

1
git merge-base branch1 branch2 //只能找到最近的祖先

那么如何找到这个分支最初的fork点呢,下面给出两种方案,亲测有效。

解决方案

git 别名

1
2
3
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'\'' -'
git config --global alias.branchdiff '!sh -c "git diff `git oldest-ancestor`.."'
git config --global alias.branchlog '!sh -c "git log `git oldest-ancestor`.."'

上述三个命令就可以找到最初的commit点,以及这个分支做了什么。参见 stackoverflow 上的回答: Finding a branch point with Git? - Stack Overflow

git分支图

如果你使用 zsh , 内置的有两个相关的命令 glgg , glgga .

  • glgg : 显示当前分支的分支图
  • 1
    2
    ➜  ~  alias glgg
    glgg='git log --graph'
  • glgga : 显示所有分支的分支图
  • 1
    2
    ➜  ~  alias glgga
    glgga='git log --graph --decorate --all'

    从分支图中可以快速的看出当前分支是在哪里fork出来的

    分支图的显示方式