找出git branch creator

Ofi*_*chy 139 git git-branch

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

我有点能够这样做:

git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*Var 266

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

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate
Run Code Online (Sandbox Code Playgroud)

  • 使用表格格式:`git for-each-ref --format ='%(committerdate)%09%(authorname)%09%(refname)'| sort -k5n -k2M -k3n -k4n | grep遥控器| awk -F"\ t"'{printf"%-32s%-27s%s \n",$ 1,$ 2,$ 3}'`(来自http://stackoverflow.com/a/3631819的想法 - 可能需要根据最大日期时间/作者姓名长度调整awk printf中的数字) (23认同)
  • 如果分支上没有任何提交,并且它是从master创建的,那么"分支的作者"与该分支完全无关,而只是master上的最后一个提交者.如果你从master中获取更改并且它是快进的,它又是master上的最后一个提交者,可能从未在该分支上工作过. (12认同)
  • 这是最后一个致力于该分支的人.由于分支只是提交的指针. (7认同)
  • 这应该在Windows上运行吗?我得到了"输入文件指定两次". (7认同)
  • 虽然这个答案和命令可能有用,但我觉得这是一个误导性的答案.这将列出作为分支上最后一个提交者的所有分支上的作者姓名.有一个*数字*的情况下,实际上不会是分支的*创建者*.真正的答案是git根本不存储这些信息. (6认同)
  • 现在有一个`--sort`选项,所以你可以做更短的`git for-each-ref --format ='%(committerdate)%09%(authorname)%09%(refname)' - 排序= committerdate` (5认同)
  • 当我输入该命令时(在Windows 10上),我收到消息"输入文件指定了两次"... (3认同)
  • 这给出了最后一个提交者而不是创建者 (3认同)
  • 添加**| grep {{branch_name}}** 获取_特定分支的作者_ `git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | grep -E {{branch_name}}` (2认同)
  • @SteveChambers被您遇到的相同“两次指定输入文件”问题所困扰,但能够在git bash上执行它(在git存储库文件夹中右键单击> Git Bash) (2认同)

Chr*_*her 48

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

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

此外,DarVar的答案是获取此信息的一种非常聪明的方法.

  • DarVar的回答虽然对某些人有用,但并不是一个准确的答案.它只是一种更简洁的方式来处理原始问题的作者已经在做的事情(即将最后一个提交者的名称获取到分支). (3认同)

Mik*_*ike 42

我通过使用--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
Run Code Online (Sandbox Code Playgroud)

  • 非常适合指责颜色 (2认同)

sur*_*upa 8

添加到/sf/answers/1339495111/

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

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

  • 仅在作者姓名为单个单词时有效。如果名字和姓氏分开,那么您将看到姓氏而不是分支名称... (2认同)

Kha*_*edP 8

git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
Run Code Online (Sandbox Code Playgroud)


Gus*_*ave 6

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

git reflog --format=full
Run Code Online (Sandbox Code Playgroud)

示例输出:

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

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

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

0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200   branch: Created from HEAD
Run Code Online (Sandbox Code Playgroud)

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

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


Tri*_*Gao 5

假设:

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

 git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1
Run Code Online (Sandbox Code Playgroud)


tec*_*504 5

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

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