Узнайте создателя Git-ветки

Я хочу узнать, кто создал ветку.

Я вроде в состоянии сделать это с:

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

Однако это возвращает последнего коммиттера на ветку, а не обязательно человека, который создал ветку.

Ответ 1

Филиал - это не что иное, как указатель фиксации. Таким образом, он не отслеживает метаданные типа "кто создал меня". Посмотреть на себя. Попробуйте cat .git/refs/heads/<branch> в вашем репозитории.

Это написано, если вы действительно отслеживаете эту информацию в своем репозитории, ознакомьтесь с описаниями ветвей. Они позволяют прикреплять произвольные метаданные к ветвям, локально на мере.

Также ответ DarVar ниже - очень умный способ получить эту информацию.

Ответ 2

Список удаленных веток Git по автору, отсортированный по дате коммиттера:

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

Ответ 3

Я подправил предыдущие ответы, используя флаг --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

Ответ 4

Добавление ответа в DarVar:

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

П.С.: Мы использовали AWK для красивой печати автора и удаленной ветки.

Ответ 5

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

Ответ 6

Вы можете узнать, кто создал ветвь в репозитории локального,

git reflog --format=full

Пример вывода:

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

Но это, вероятно, бесполезно, как обычно в вашем локальном репозитории, только вы создаете ветки.

Информация хранится в. /.git/logs/refs/heads/branch. Пример содержимого:

0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <[email protected]> 1438788420 +0200   branch: Created from HEAD

Последняя фиксация в этом примере была от пользователя "b", а ветвь "b2" была создана пользователем "a". Если вы измените свое имя пользователя, вы можете убедиться, что git reflog берет информацию из журнала и не использует локального пользователя.

Я не знаю о возможности передачи этой информации локального журнала в центральный репозиторий.

Ответ 7

Предполагая, что:

  1. ветка была сделана из master
  2. еще не был объединен с master

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

Ответ 8

ПРИМЕЧАНИЕ. Это может быть частичным ответом для вас.

Для нас это был полный ответ.

Нам нужно, чтобы все ветки и их владельцы удаляли, так как нас было всего 10 человек, но там было еще 200 существующих веток. Это видно из:
https://my-github-domain-name.com/my-git-organization-name/my-git-repo-name/ ветки/активные

Я использовал команду ниже, находясь в локальном каталоге репозитория git:

git branch --list -a > branch-list.txt

Затем все ветки попадают в файл branch-list.txt.

Поскольку мы ввели имена в именах ветвей git, мы уже выполнили.

Ответ 9

Я знаю, что это не совсем предмет вопроса, но если вы обнаружите необходимость фильтровать только коммиты по конкретному автору, вы всегда можете обратиться к 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'

Удачного кодирования! :)

Ответ 10

для тех, кто ищет 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

далее ссылка: fooobar.com/questions/12307/...

Ответ 11

Насколько я знаю, вы можете видеть, является ли вы создателем ветки. Это указывается первой строкой в ​​.git/ref/heads/<branch> . Если он заканчивается на "Создано из HEAD", вы являетесь создателем.