195

我想知道谁创建了一个分支。

我可以这样做:

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

但是,这会返回每个分支的最后一个提交者,不一定是创建分支的人。

4

12 回答 12

355

按提交者日期排序的作者列出远程 Git 分支:

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate
于 2013-10-02T11:14:35.207 回答
67

分支只不过是一个提交指针。因此,它不会跟踪诸如“谁创造了我”之类的元数据。你自己看。在您的存储库中尝试cat .git/refs/heads/<branch>

如果您真的想在存储库中跟踪此信息,请查看分支描述。它们允许您至少在本地将任意元数据附加到分支。

DarVar在下面的回答也是获取此信息的一种非常聪明的方法。

于 2012-08-21T13:06:26.710 回答
55

我通过使用--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
于 2016-08-31T13:34:00.220 回答
8

添加到DarVar 的答案

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

PS:我们使用 AWK 漂亮地打印作者和远程分支。

于 2014-07-16T17:48:01.760 回答
8
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
于 2016-06-29T14:48:34.333 回答
7

您可以通过以下方式找出谁在本地存储库中创建了分支

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>
(...)

但这可能没有用,因为通常只有在您创建分支的本地存储库上。

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

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

此示例中的最后一次提交来自用户“b”,而分支“b2”由用户“a”创建。如果您更改用户名,您可以验证 git reflog 从日志中获取信息并且不使用本地用户。

我不知道将本地日志信息传输到中央存储库的任何可能性。

于 2015-08-05T15:47:52.537 回答
5

我们可以根据作者姓名找出

git for-each-ref --format='%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)' refs/remotes/ --sort=authorname DESC
于 2019-10-30T10:19:28.903 回答
3

假设:

  1. 分支是由master
  2. 尚未master合并

 git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1
于 2017-02-16T18:03:11.280 回答
0

据我所知,您可能会看到是否只是分支的创建者。这由 .git/ref/heads/<branch> 中的第一行表示。如果它以“从 HEAD 创建”结尾,那么您就是创建者。

于 2013-02-02T20:57:41.830 回答
0

对于那些寻找 DESC 的人......这似乎有效--sort=-

ty 的格式,新的...我的眼睛正在失去一些它的血丝

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

进一步参考:https ://stackoverflow.com/a/5188364/10643471

于 2019-10-14T16:00:03.540 回答
0

警告!

请注意,这些命令显示了分支指向的提交数据,因此提交作者可能与分支作者不同。Git 不存储分支创建者,只存储提交的创建者。

于 2021-11-24T11:47:03.420 回答
0

我知道这不完全是问题的范围,但是如果您发现只需要过滤特定作者的提交,您可以随时通过管道传递到 grep :)

# lists all commits in chronological order that
# belong to the github account with
# username `MY_GITHUB_USERNAME` (obviously you
# would want to replace that with your github username,
# or the username you are trying to filter by)


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

快乐编码!:)

于 2018-03-16T22:19:00.683 回答