有什么方法可以通过git log实现“按分支图”功能吗?

时间:2019-06-03 14:31:30

标签: git

我要实现的是一个Git图形日志,其中每个分支都分配有一个单独的列。

$ git log --graph --all --topo-order --decorate --oneline --boundary \
    --force-branch-columns=master,dev
    * f745bf5 (HEAD, newbranch) Merge branch 'master' into newbranch
   /|                                                               
  / * 7031537 commit                                                
 /  * 416ab2c commit                                                
| * | a9f8d93 (dev) Merge branch 'master' into dev                  
|/| |                                                               
* | | 5f32650 (master) commit                                       
| * | b511501 Merge branch 'master' into dev                        
|/| |                                                               
* | | 4e6810e commit                                                
| * | 2cd55b4 Merge branch 'master' into dev                        
|/|/                                                                
| /                                                                 
|/|                                                                 
* | 4f74695 commit                                                  
| * 372799e Merge branch 'master' into dev                          
|/|                                                                 
* | 076669f commit                                                  
 \|                                                                 
  * 7382440 initial empty commit                                    

在这里我找到了一些结果,但没有实现任何结果的方法: https://gist.github.com/michaelhood/5075495

$ git log --graph --all --topo-order --decorate --oneline --boundary \
    --force-branch-columns=master,dev

2 个答案:

答案 0 :(得分:3)

没有-但也值得注意的是,这样的功能会产生误导。

例如,提交4e6810e在分支master上的事实不会改变提交4e6810e在分支newbranch上的事实。许多提交同时在许多分支上。随着分支名称的创建和销毁,包含任意一个提交 C 的分支集会随着时间变化。

始终保持不变。只是标签(分支名称)会发生变化。 1 语句 commit C位于分支B 上只是意味着从提交开始由名称​​ B 标识,并在通过提交图形成的历史记录的所有路径中向后工作,Git可以到达提交 C

Git确实具有在图形中向后工作的概念,但是每次合并时仅遵循 first 父级。也就是说,给定一个像这样的图:

...--o--o--o--o---o--o   <-- name1
      \          /
       o--o--o--o   <-- name2

一个人可以让Git从name1所标识的尖端提交开始,并向后浏览两行提交,或者使Git从name1所标识的尖端提交开始,并且仅沿第一行向后走(假设合并的第一个父对象位于第一行)。为此,两个基本的图形遍历命令git loggit rev-list具有选项--first-parent


1 例如,删除名称master后,提交4e6810e将不再位于master上(不再存在)。

答案 1 :(得分:1)

例如,您可以接近

git show-branch master dev newbranch

每个分支分配一列。

相关问题