web-dev-qa-db-fra.com

Découvrez le créateur de la branche git

Je veux savoir qui a créé une branche.

Je suis en quelque sorte capable de le faire avec:

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

Toutefois, cela renvoie le dernier committeur par branche, pas nécessairement la personne qui a créé la branche.

113
Ofir Farchy

Une branche n'est rien qu'un pointeur de validation. En tant que tel, il ne suit pas les métadonnées comme "qui m'a créé". Voir par vous-même. Essayez cat .git/refs/heads/<branch> dans votre référentiel.

Cela dit, si vous souhaitez vraiment suivre ces informations dans votre référentiel, consultez les descriptions des branches. Ils permettent d’attacher des métadonnées arbitraires aux branches, au moins localement.

Aussi La réponse de DarVar ci-dessous est un moyen très intelligent d’obtenir ces informations.

42
Christopher

Liste Remote Git Branches Par Auteur classé par committerdate:

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

J'ai peaufiné les réponses ci-dessus en utilisant le drapeau --sort et en ajoutant un peu de couleur/formatage.

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
24
Mike
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
8
KhaledMohamedP

Ajout à 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. Nous avons utilisé awk pour imprimer joliment l'auteur et la branche distante

7
suryakrupa

Vous pouvez trouver qui a créé une branche dans votre répertoire local en cliquant sur

git reflog --format=full

Exemple de sortie:

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

Mais cela est probablement inutile, car généralement sur votre référentiel local, vous créez des branches.

Les informations sont stockées dans ./.git/logs/refs/heads/branch . Exemple de contenu:

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

Le dernier commit dans cet exemple provenait de l'utilisateur "b" alors que la branche "b2" a été créée par l'utilisateur "a". Si vous modifiez votre nom d'utilisateur, vous pouvez vérifier que git reflog extrait les informations du journal et n'utilise pas l'utilisateur local.

Je ne connais aucune possibilité de transmettre ces informations de journal locales à un référentiel central.

3
Gustave

en supposant:

  1. la branche a été faite à partir de master
  2. n'a pas encore été fusionné avec master

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

Je sais que ce n'est pas tout à fait la portée de la question, mais si vous trouvez qu'il est nécessaire de filtrer uniquement les commits d'un auteur spécifique, vous pouvez toujours accéder à 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'

bonne codage! :)

0
avocadojesus