如何在git日志中列出相关分支

时间:2018-02-15 11:54:32

标签: git git-log

我正在寻找一种可能性来显示给定文件的历史记录以及给定提交所在分支的信息。

鉴于这个git repositority:

$ git log --graph --all --decorate=full --pretty=oneline --abbrev-commit 
* 3b116ab (refs/heads/br2) x
| * 8777a0a (HEAD -> refs/heads/br1, refs/heads/branch) g
| * 9be1f38 d
|/ 
| * 3a30d9c (refs/heads/master) d
| * e678c2f c
|/  
* faa3666 b
* 03ea6ad a

我需要给定文件的历史记录

$ git log --graph --all --decorate=full --pretty=oneline --abbrev-commit -- a
* 9be1f38 d
| * e678c2f c  
|/  
* faa3666 b
* 03ea6ad a

以及提交的分支在

中的信息
$ git branch -a
* br1
  br2
  branch
  master

$ git branch -a --contains 9be1f38
* br1
  branch

$ git branch -a --contains e678c2f
  master

$ git branch -a --contains faa3666
* br1
  br2
  branch
  master

在一个概述中合并,例如

$ git magical-command
+ refs/heads/br2
| + HEAD -> refs/heads/br1, refs/heads/branch
| * 9be1f38 d
|/ 
| + refs/heads/master
| * e678c2f c
|/  
* faa3666 b
* 03ea6ad a

当然,实际上会有更多提交没有更改我的文件“a”。

我认为这可能不是那么不寻常,但我没有找到这样的东西。所以任何提示都会受到欢迎。

1 个答案:

答案 0 :(得分:1)

你可以得到你想要的东西,但是误解需要先清理,不要忽略这一点:提交可以是任意数量提交的祖先,无论你在本地仓库中使用什么名称都是无关紧要的。分支名称是指历史图表中当前特定的提交,但它们严格本地;任何两个回购中使用的分支名称之间的任何对应都是方便或巧合的问题,你昨晚回购中的WIP分支几乎肯定与Sam的WIP分支无关。

您正在寻找的命令是

git log --graph --decorate --oneline --ancestry-path --simplify-by-decoration --branches ^9be1f38

前三个参数非常有用

git config --global alias.lgdo '!f(){ git log --graph --decorate --oneline "${@---all}"; }; f'

因此git lgdo提供了完整的概述,git lgdo @提供了当前结帐记录,等等。

您的命令将是

git lgdo --ancestry-path --simplify-by-decoration --branches ^9be1f38