Как я могу просмотреть журнал git только коммитов одного пользователя?

1258

При использовании git log, как я могу фильтровать по пользователю, чтобы я видел только коммиты от этого пользователя?

markdorison
источник
4
Есть ли способ увидеть то же самое прямо на github?
Vadorequest
1
Чтобы сделать это на GitHub: stackoverflow.com/a/23515164/26510
Брэд Паркс

Ответы:

1715

Это работает для обоих git logи gitk- 2 самых распространенных способа просмотра истории.
Вам не нужно использовать полное имя:

git log --author="Jon"

будет соответствовать коммиту, сделанному "Джонатаном Смитом"

git log --author=Jon

а также

git log --author=Smith

также будет работать. Кавычки необязательны, если вам не нужны пробелы.

Добавьте, --allесли вы собираетесь искать по всем веткам, а не только по предкам текущего коммита в вашем репо.

Вы также можете легко сопоставить несколько авторов, поскольку регулярное выражение является основным механизмом для этого фильтра. Таким образом, чтобы перечислить коммиты Джонатана или Адама, вы можете сделать это:

git log --author="\(Adam\)\|\(Jon\)"

Чтобы исключить коммиты определенного автора или группы авторов с использованием регулярных выражений, как отмечено в этом вопросе , вы можете использовать отрицательный прогноз в сочетании с --perl-regexpпереключателем:

git log --author='^(?!Adam|Jon).*$' --perl-regexp

В качестве альтернативы, вы можете исключить коммиты, созданные Адамом, используя bashи конвейер:

git log --format='%H %an' | 
  grep -v Adam | 
  cut -d ' ' -f1 | 
  xargs -n1 git log -1

Если вы хотите исключить коммиты, совершенные (но не обязательно созданные) Адамом, замените %anна %cn. Подробнее об этом в моем блоге здесь: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
источник
9
Есть ли способ сделать обратное? Скажи - я хочу увидеть все коммиты, кроме джона.
Ян Робинсон
4
@ Что касается журнала помощи git, «Jon» - это регулярное выражение, поэтому оно должно быть довольно простым
sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Адам Димитрук
4
Есть ли способ сделать так gitk, чтобы родительские коммиты были пропущены другими авторами? (Они показаны белыми кружками.) Напротив, git log --graphне показывает родительские коммиты; он показывает только коммиты данного автора. Я хотел бы увидеть тот же результат в gitk. (Уже проверил Настройки и Изменить вид - не смог найти ничего полезного.)
ADTC
2
Остерегайтесь, это чувствительно к регистру
Чиль тен Бринке
44

На github есть и секретный путь ...

Вы можете отфильтровать коммиты по автору в представлении коммитов, добавив param ?author=github_handle. Например, ссылка https://github.com/dynjs/dynjs/commits/master?author=jingweno показывает список изменений в проекте Dynjs.

Слотт
источник
1
какой-нибудь способ увидеть через ветви? что-то вроде коммитов / всего?
свист
Как ты это нашел? Какие другие флаги поддерживаются?
Вудроу Барлоу
1
Ответ pro.mean, как это сделать через интерфейс: stackoverflow.com/a/39123694/1225617
Адам Миллерчип,
Я не предпочитаю этот ответ, потому что вопрос был связан с программным обеспечением, а не с конкретной услугой.
Валерио Бозз
Вопрос был только в том, как просмотреть журнал git - независимо от технологии. Так что этот ответ отвечает всем требованиям.
Слотт
31
git help log

дает вам справочную страницу журнала git. Найдите «автора» там, нажав /, а затем напечатав «автор», а затем Enter. Введите «n» несколько раз, чтобы перейти к соответствующему разделу, который показывает:

git log --author="username"

как уже предлагалось.

Обратите внимание, что это даст вам автора коммитов, но в Git автором может быть кто-то, отличный от коммиттера (например, в ядре Linux, если вы отправляете патч как обычный пользователь, он может быть зафиксирован другим администратором .) Видите разницу между автором и коммиттером в Git? Больше подробностей)

Большую часть времени пользователь и коммиттер, и автор называют пользователя.

Ustun
источник
21
@ Джеймс, я думаю, твой негатив здесь неоправдан. Я просто пытался научить его, как искать это из командной строки на случай, если он забудет. Я думаю, что вы принимаете меня за человека, который просто говорит RTFM, но я включил ответ в свой ответ.
июня
11
Это не негатив. Это тот факт, что люди приходят сюда, чтобы спросить совета, и многие хотят ответить каким-то вариантом RTFM. Бодет плохо для сообщества.
Джеймс
11
@ Джеймс, я должен согласиться с ustun здесь. Он действительно ответил на вопрос и предложил стратегию поиска ответа, которая поможет найти ответы на другие вопросы, связанные с git.
Питер
4
Я не думаю, что это так же черно-белый, как этот. Теперь я согласен с unstun, что мы должны учить людей, как делать вещи для себя - это хорошая идея. Когда unstun пошло не так, как надо, делает предположения: а) ОП знает, как искать страницу руководства, и, что более важно, б) что ОП знает, что нужно искать «автора». Возможно, они искали «коммиттер», «имя» или что-то в этом роде.
Джон Хант
6
@JohnHunt вы правы, мне никогда не приходило в голову объяснить, что значит поиск и как это делается в то время. Вид предполагал это. Исправление текста слегка.
ustun
23

Чтобы получить более подробную информацию - (здесь %anотносится к автору)

Использовать этот :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Сириш Ярлагадда
источник
И если вы хотите, чтобы %aeвместо их адреса электронной почты использовался формат %an(который дал имя.)
MarkHu
--authorна самом деле поиск по имени автора, а не имени коммиттера. Я бы поменял "username"на автора
Algorithmatic
17
cat | git log --author="authorName" > author_commits_details.txt

Это дает ваши коммиты в текстовом формате.

Джонса Филипп
источник
20
Какова цель cat |?
Кейт Томпсон
3
@KeithThompson Чтобы преследовать мышь.
NVD
14

Если вы хотите отфильтровать свои коммиты:

git log --author="<$(git config user.email)>"
Лука Фаджанелли
источник
1
Он также работает без кавычек и скобок (по крайней мере, для git bash и ubuntu bash).
Лавамантис
12

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

git log --author=mr  #if you're looking for mrfoobar's commits
три
источник
11

попробуйте этот инструмент https://github.com/kamranahmedse/git-standup

Применение

```bash
$ git standup [-a <author name>] 
              [-w <weekstart-weekend>] 
              [-m <max-dir-depth>]
              [-f]
              [-L]
              [-d <days-ago>]
              [-D <date-format>] 
              [-g] 
              [-h]
```

Ниже приведено описание для каждого из флагов

- `-a`      - Specify author to restrict search to (name or email)
- `-w`      - Specify weekday range to limit search to (e.g. `git standup -w SUN-THU`)
- `-m`      - Specify the depth of recursive directory search
- `-L`      - Toggle inclusion of symbolic links in recursive directory search
- `-d`      - Specify the number of days back to include
- `-D`      - Specify the date format for "git log" (default: relative)
- `-h`      - Display the help screen
- `-g`      - Show if commit is GPG signed or not
- `-f`      - Fetch the latest commits beforehand
InsaneBot
источник
6

Так как другой вопрос (возможно, ошибочно?) Заблокирован, я просто добавлю это здесь:

показать авторов с их количеством коммитов:

git shortlog -nse

найти все коммиты для конкретного ИМЯ ПОЛЬЗОВАТЕЛЯ:

git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show
sjas
источник
5

Покажите количество логов для пользователя x в цвете, добавив этот небольшой фрагмент в файл .bashrc.

gitlog() {
    if [ "$1" ] && [ "$2" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1" --author="$2"
    elif [ "$1" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1"
    else
        git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order
    fi
}

alias l=gitlog

Чтобы показать последние 10 коммитов Фрэнка:

l 10 frank

Чтобы показать последние 20 коммитов кем-либо:

l 20

Фрэнк Форте
источник
4

Если вы используете GitHub:

  • перейти в филиал
  • нажмите на коммиты

это покажет список в формате ниже

branch_x: < comment> 
author_name committed 2 days ago
  • увидеть индивидуальный авторский коммит; нажмите на author_name и там вы можете увидеть все коммиты этого автора в этой ветке
diEcho
источник
2
Это много кликов и предполагает размещение git-репо. Не отвечает на CLI, как сделали многие из вышеперечисленных.
lacostenycoder
1
@lacostenycoder, но это полезная информация, тем более что на GitHub так много проектов git!
Адам Миллерчип
2

Вы можете использовать либо =, либо "пробел". Например, следующие две команды возвращают одинаковые

git log --author="Developer1"

git log --author "Developer1"
harshainfo
источник
1

Мой случай: я использую дерево исходников, я выполнил следующие шаги:

  1. Прессованные CRL+3
  2. Изменены выпадающие авторы
  3. Набрал название "Винод Кумар"

введите описание изображения здесь

Винод Кумар
источник
1

Хотя есть много полезных ответов. Принимая во внимание, просто чтобы добавить еще один способ. Вы также можете использовать

git shortlog --author="<author name>" --format="%h %s"

Он покажет вывод в сгруппированном виде:

<Author Name> (5):
  4da3975f dependencies upgraded
  49172445 runtime dependencies resolved
  bff3e127 user-service, kratos, and guava dependencies upgraded
  414b6f1e dropwizard :- service, rmq and db-sharding depedencies upgraded
  a96af8d3 older dependecies removed

Здесь всего 5 коммитов выполняются в <Author Name>рамках текущей ветки. Принимая во внимание, что вы также можете использовать --allдля принудительного поиска везде (все ветви) в хранилище git.

Один улов: git внутренне пытается сопоставить вход <author name>с именем и адресом электронной почты автора в базе данных git. Это чувствительно к регистру .

surajs1n
источник