找出git分支的创build者

我想找出谁创build了一个分支。

我可以这样做:

git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _ 

但是,这将返回每个分支的最后一个提交者,而不一定是创build分支的人员。

一个分支只不过是一个提交指针。 因此,它不会跟踪“谁创造了我”这样的元数据。 你自己看。 试试你的仓库中的cat .git/refs/heads/<branch>

这写,如果你真的在你的仓库中跟踪这些信息,请查看分支描述。 它们允许您至less在本地附加任意元数据到分支。

DarVar的回答下面是一个非常聪明的方式来获取这些信息。

列出远程Git分支按作者sortingcommitterdate:

 git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n 

添加到https://stackoverflow.com/a/19135644/2917986

 git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}' 

PS我们用awk来打印作者和远程分支

 git for-each-ref --format='%(authorname) %09 -%(refname)' | sort 

我通过使用–sort标志和添加一些颜色/格式来调整上述答案。

 git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes 

你可以通过find谁在你的本地仓库中创build了一个分支

 git reflog --format=full 

示例输出:

 commit e1dd940 Reflog: HEAD@{0} (a <a@none>) Reflog message: checkout: moving from master to b2 Author: b <b.none> Commit: b <b.none> (...) 

但是,这通常是无用的,通常只在您的本地存储库上创build分支。

信息存储在./.git/logs/refs/heads/ 分支 。 示例内容:

 0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200 branch: Created from HEAD 

这个例子中的最后一个提交来自用户“b”,而分支“b2”来自用户“a”。 如果您更改您的用户名,您可以validationgit reflog从日志中获取信息,并且不使用本地用户。

我不知道是否有可能将本地日志信息传输到中央存储库。

据我所知,你可能会看到是否只是一个分支的创造者。 这是由.git / ref / heads / <branch>中的第一行指示的。 如果以“创build自HEAD”结尾,则是创build者。

假设:

  1. 分支是由master
  2. 还没有合并到master

  git log --format="%ae %an" master..<HERE_COMES_BRANCH_NAME> | tail -1 

注意:这可能是您的部分答案

对我们来说,这是一个完整的答案。

我们需要删除所有分支机构及其所有者,因为我们只有10人,但现在有200多个分支机构。 这些可以从以下方面看出:
https://my-github-domain-name.com/my-git-organization-name/my-git-repo-name/ branches / active

我用下面的命令,在git local repo目录下:

 git branch --list -a > branch-list.txt 

然后,所有分支都列在branch-list.txt文件中。

由于我们在git分支名称前加上了我们的名字,所以我们已经完成了。