找出git branch creator

时间:2012-08-21 12:48:39

标签: git git-branch

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

我有能力这样做:

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

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

11 个答案:

答案 0 :(得分:244)

列出远程Git分支按作者排序的committerdate:

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

答案 1 :(得分:44)

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

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

同样DarVar's answer below是获取此信息的一种非常聪明的方式。

答案 2 :(得分:30)

我通过使用--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

答案 3 :(得分:8)

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

答案 4 :(得分:7)

添加到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}'

P.S。我们使用awk来打印作者&amp;远程分支

答案 5 :(得分:3)

您可以通过

找出在本地存储库中创建分支的人员
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 / 分支中。 示例内容:

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

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

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

答案 6 :(得分:2)

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

git for-each-ref --format='%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)' refs/remotes/ --sort=authorname DESC

答案 7 :(得分:1)

假设:

  1. 分支来自master
  2. 尚未合并到master
  3.  git log --format="%ae %an" master..<HERE_COMES_BRANCH_NAME> | tail -1
    

答案 8 :(得分: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'
快乐的编码! :)

答案 9 :(得分:0)

对于正在寻找DESC的人来说……似乎很有效--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

其他参考文献:https://stackoverflow.com/a/5188364/10643471

答案 10 :(得分:-1)

据我所知,您可能会看到只是分支机构的创建者。这由.git / ref / heads /&lt; branch&gt;中的第一行表示。如果它以“Created from HEAD”结束,那么你就是创造者。