Gitブランチの作成者を見つける


158

誰がブランチを作成したのか知りたい。

私はそうすることができます:

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

ただし、これはブランチごとに最後のコミッターを返します。必ずしもブランチを作成した人ではありません。


7
gitではブランチの作成者/作成者を取得できません。ここで行っているのは、ブランチの先端の作成者を取得することです。誰かが新しいコミットをそこにプッシュするとすぐに変更されます。
sylvain.joyeux 2012

1
免責事項:この質問/回答の暗黙の前提は、「ブランチごとに1人のみのワークフロー」であるということです。少なくとも2人の同僚がブランチを共有する他のワークフローでは、この情報(ブランチクリエーター)はgitから取得できず、上記の答えは誰かを誤った仮定に導く可能性があります。
-RomainValeri

回答:


56

ブランチはコミットポインタに他なりません。そのため、「だれが私を作成したか」などのメタデータは追跡されません。自分で見て。cat .git/refs/heads/<branch>リポジトリで試してください。

書かれていることですが、リポジトリでこの情報を本当に追跡している場合は、ブランチの説明を確認してください少なくともローカルでは、ブランチに任意のメタデータを添付できます。

また、以下のDarVarの回答は、この情報を得る非常に賢い方法です。


私にとってこれは.git / refs / heads / <branch>にありました "ref"は複数形でした
Jeffrey LeCours 2014年

4
DarVarの回答は、おそらく一部の人にとっては有用ですが、正確な回答ではありません。これは、元の質問の作成者が既に行っていたことを行う(つまり、ブランチの最後のコミッターの名前を取得する)より簡潔な方法です。
peabody

295

コミッターの日付でソートされた作成者別にリモートGitブランチをリストします。

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

8
それはそのブランチにコミットする最後の人です。ブランチは単にコミットへのポインタなので。
DarVar

7
これはWindowsで動作しますか?「入力ファイルを2回指定」してもらいました。
Steve Chambers

27
表形式で:git for-each-ref --format='%(committerdate)%09%(authorname)%09%(refname)' | sort -k5n -k2M -k3n -k4n | grep remotes | awk -F "\t" '{ printf "%-32s %-27s %s\n", $1, $2, $3 }'stackoverflow.com/a/3631819からアイデアを得た-awk printfの数値を最大日時/作成者名の長さに応じて調整する必要があるかもしれない)
Gary S. Weaver

15
ブランチでコミットが行われておらず、マスターから作成されている場合、「ブランチの作成者」はそのブランチとはまったく無関係ですが、マスターの最後のコミッターのみです。マスターから変更をプルし、それが早送りである場合、それは再びマスターの最後のコミッターであり、おそらくそのブランチで作業したことはありません。
ギュスターヴ

9
この回答とコマンドは潜在的に有用ですが、質問に対する誤解を招く答えだと思います。これは、ブランチの最後のコミッターであるすべてのブランチの作者名をリストします。実際にはブランチの作成者ではない状況がいくつかあります。本当の答えは、gitは単にこの情報を保存しないということです。
ピーボディ、2018

46

--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

1
色で非難するのに最適
suarsenegger 2017


8

DarVarの答えに追加:

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

PS:AWKを使用して著者とリモートブランチをきれいに印刷しました。


3
これは、著者名が単一の単語である場合にのみ機能します。姓と名が区切られている場合、ブランチ名ではなく姓が表示されます...
Legato

5

ローカルリポジトリにブランチを作成したユーザーは、次の方法で確認できます。

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

この例の最後のコミットはユーザー「b」からのもので、ブランチ「b2」はユーザー「a」によって作成されました。ユーザー名を変更すると、git reflogがログから情報を取得し、ローカルユーザーを使用しないことを確認できます。

そのローカルログ情報を中央リポジトリに送信する可能性については知りません。


4

著者名に基づいて調べることができます

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

1

仮定:

  1. ブランチはから作られました master
  2. masterまだ統合されていません

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

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'

幸せなコーディング!:)


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


-1

私が知る限り、ブランチの作成者のみであるかどうか確認できます。これは、.git / ref / heads / <branch>の最初の行で示されています。「Created from HEAD」で終わる場合は、あなたが作成者です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.