Como posso visualizar um log git com apenas confirmações de um usuário?

1258

Ao usar git log, como posso filtrar por usuário para ver apenas confirmações desse usuário?

markdorison
fonte
4
Existe uma maneira de ver a mesma coisa diretamente github?
Vadorequest
1
Para fazer isso no github: stackoverflow.com/a/23515164/26510
Brad Parks

Respostas:

1715

Isso funciona para ambos git loge gitk- as 2 formas mais comuns de visualização de histórico.
Você não precisa usar o nome inteiro:

git log --author="Jon"

corresponderá a um commit feito por "Jonathan Smith"

git log --author=Jon

e

git log --author=Smith

também funcionaria. As aspas são opcionais se você não precisar de espaços.

Adicione --allse você deseja pesquisar todos os ramos e não apenas os ancestrais do commit atual em seu repositório.

Você também pode corresponder facilmente a vários autores, pois a expressão regular é o mecanismo subjacente a esse filtro. Então, para listar confirmações de Jonathan ou Adam, você pode fazer o seguinte:

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

Para excluir confirmações de um determinado autor ou conjunto de autores usando expressões regulares, conforme observado nesta pergunta , você pode usar um lookahead negativo em combinação com a --perl-regexpopção:

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

Como alternativa, você pode excluir confirmações criadas por Adam usando bashe canalizando:

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

Se você deseja excluir confirmações confirmadas (mas não necessariamente criadas) por Adam, substitua %anpor %cn. Mais detalhes sobre isso estão no meu blog aqui: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

Adam Dymitruk
fonte
9
Existe uma maneira de fazer o oposto? Diga - quero ver todos os commits, exceto os de Jon.
31511 Ian Robinson
4
@Ian como para log ajuda git "Jon" é uma expressão regular para que ele deve ser muito fácil
sumek
2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk
4
Alguma maneira de gitkdeixar de fora os pais cometem com outros autores? (Eles são mostrados com círculos brancos.) Por outro lado, git log --graphnão mostra o pai confirma; mostra apenas os commits do autor fornecido. Eu adoraria ver a mesma saída em gitk. (Já verifiquei Preferências e Edit View - não poderia encontrar qualquer coisa útil.)
ADTC
2
Cuidado sensível a maiúsculas
Chiel ten Brinke
49
git log --author="that user"
wilhelmtell
fonte
44

No github, há também uma maneira secreta ...

Você pode filtrar confirmações por autor na visualização de confirmação anexando param ?author=github_handle. Por exemplo, o link https://github.com/dynjs/dynjs/commits/master?author=jingweno mostra uma lista de confirmações para o projeto Dynjs

slott
fonte
1
alguma maneira de ver através dos galhos? algo como confirma / tudo?
whizcreed
Como você encontrou isso? Quais outros sinalizadores são suportados?
Woodrow Barlow
1
A resposta de pro.mean como fazer isso através da interface: stackoverflow.com/a/39123694/1225617
Adam Millerchip
Não prefiro esta resposta porque a pergunta estava relacionada a um software e não a um serviço específico.
Valerio Bozz
A questão era exatamente como visualizar o log do git - independentemente da tecnologia. Portanto, essa resposta se encaixa perfeitamente.
slott
31
git help log

fornece a página de manual do git log. Procure por "autor" pressionando / e, em seguida, digitando "autor", seguido de Enter. Digite "n" algumas vezes para chegar à seção relevante, que revela:

git log --author="username"

como já sugerido.

Observe que isso fornecerá o autor do commit, mas no Git, o autor pode ser alguém diferente do commit (por exemplo, no kernel do Linux, se você enviar um patch como um usuário comum, ele poderá ser confirmado por outro usuário administrativo .) Veja Diferença entre autor e committer no Git? para mais detalhes)

Na maioria das vezes, o que se refere como o usuário é tanto o autor quanto o autor.

ustun
fonte
21
@ James Eu acho que a sua negatividade aqui é injustificada. Eu estava simplesmente tentando ensiná-lo a procurar na linha de comando, caso ele esquecesse. Acho que você está me confundindo com uma pessoa que apenas diz RTFM, mas incluí a resposta na minha resposta.
ustun
11
Não é negatividade. É o fato de que as pessoas vêm aqui pedindo conselhos e muitas pessoas querem responder com alguma variante do RTFM. É um mau presságio para a comunidade.
James
11
@ James Eu tenho que concordar conosco aqui. Ele fez responder à pergunta, e ele ofereceu uma estratégia para encontrar a resposta que é útil para encontrar respostas para outras questões relacionadas com o git.
Peter
4
Eu não acho que seja tão preto e branco quanto isso. Agora, concordo com o desenrolar de que devemos educar as pessoas a fazer as coisas por si mesmas - é uma boa ideia. Onde o desenrolar deu um pouco de errado, é fazer as suposições a) Que o OP saiba pesquisar uma página de manual e, mais importante, b) Que o OP saiba pesquisar por 'autor'. Eles podem ter procurado por 'committer' ou 'name' ou algo assim.
John Hunt
6
@ JohnHunt, você está certo, nunca me ocorreu explicar o que significa pesquisa e como é feita na época. Meio que assumiu. Corrigindo o texto um pouco.
Ustun
23

Para obter mais detalhes - (Aqui %anse refere ao autor)

Usa isto :-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"
Sireesh Yarlagadda
fonte
E se você quiser seu formato Email endereço uso %aeem vez de %an(que deu nome.)
MarkHu
--authorna verdade, procura pelo nome do autor e não pelo nome do autor. Eu mudaria "username"para autor #
Algorithmatic
17
cat | git log --author="authorName" > author_commits_details.txt

Isso fornece seus commits em formato de texto.

Johnsa Philip
fonte
20
Qual é o propósito do cat |?
21116 Keith Thompson
3
@KeithThompson Para perseguir um mouse.
nvd 18/03
14

Se você deseja filtrar seus próprios commits:

git log --author="<$(git config user.email)>"
Luca Faggianelli
fonte
1
Também funciona sem aspas e colchetes (pelo menos no git bash e no ubuntu bash).
Lavamantis
12

Você pode até abreviar um pouco usando simplesmente parte do nome do usuário:

git log --author=mr  #if you're looking for mrfoobar's commits
três
fonte
11

tente esta ferramenta https://github.com/kamranahmedse/git-standup

Uso

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

Abaixo está a descrição para cada uma das bandeiras

- `-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
fonte
6

Como a outra pergunta foi (possivelmente por engano?) Bloqueada, vou colocar isso aqui:

mostre os autores com suas contagens de confirmação:

git shortlog -nse

encontre todas as confirmações para USERNAME específico:

git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show
sjas
fonte
5

Mostre o número n de logs para x usuário em cores, adicionando este pequeno trecho ao seu arquivo .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

Para mostrar os últimos 10 confirmados por Frank:

l 10 frank

Para mostrar os últimos 20 commits por qualquer pessoa:

l 20

Frank Forte
fonte
4

Se você estiver usando o GitHub:

  • ir para o ramo
  • clique em confirma

mostrará a lista no formato abaixo

branch_x: < comment> 
author_name committed 2 days ago
  • ver o comprometimento do autor individual; clique em author_name e você poderá ver todos os commit desse autor nesse ramo
diEcho
fonte
2
São muitos cliques e pressupõe o repositório Git hospedado. Não responde à CLI como muitos acima fizeram.
lacostenycoder
1
@lacostenycoder, mas são informações úteis, especialmente porque existem muitos projetos git no GitHub!
precisa saber é o seguinte
2

Você pode usar = ou "espaço". Por exemplo, após dois comandos retornam o mesmo

git log --author="Developer1"

git log --author "Developer1"
harshainfo
fonte
1

Meu caso: estou usando a árvore de origem, segui as seguintes etapas:

  1. Pressionado CRL+3
  2. Autores suspensos alterados
  3. Digitou o nome "Vinod Kumar"

insira a descrição da imagem aqui

Vinod Kumar
fonte
1

Embora existam muitas respostas úteis. Considerando que, apenas para adicionar outra maneira a ele. Você também pode usar

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

Ele mostrará a saída da maneira agrupada:

<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

Aqui, o total de 5 confirmações é feito <Author Name>sob a ramificação atual. Visto que você também pode usar --allpara impor a pesquisa em todos os lugares (todos os ramos) no repositório git.

Um problema: o git tenta internamente combinar uma entrada <author name>com o nome e o email do autor no banco de dados git. Faz distinção entre maiúsculas e minúsculas .

surajs1n
fonte