logar os primeiros 10 no git

89

Duas questões:

  1. Como mostrar os primeiros 10 commit no git do começo ao fim. (sem filial)
  2. Como especificar o índice de confirmação e registrá-lo. (mostrar o segundo ou terceiro)

Eu sei que git use parent para vincular o commit, é fácil registrar o commit do início ao fim. gostar:git log HEAD~10

Mas preciso consultar do início ao fim, é possível?

yohan zhou
fonte
role para @kostix answer
Muhammad Umer

Respostas:

59

Basta registrar tudo em um formato de linha e seguir a saída:

git log  --pretty=oneline | tail -n 10 
CharlesB
fonte
Ótimo! É isso que estou procurando. Tks @CharlesB.
yohan zhou
3
Ou use git rev-list HEAD | tail -n 10para obter os 10 IDs para listar, que você pode mostrar no formato que desejar (não limitado ao método de uma linha).
torek
15
tailparece perder a bela coloração que recebo em meu console git. Passar um parâmetro como git log --oneline -10na outra resposta funciona como eu esperava.
James Hulse
4
Este é claramente o jeito Unix hard-core, lol. Por favor, veja a resposta de @kostix.
9301293
1
A desvantagem desse método é que só consigo ver meus commits enviados.
Jack '
245
git log -10

Mostraria os 10 últimos commits que correspondem à especificação de revisão (uma especificação ausente significa "todos os commits").

Veja a página de manual:

git help log

seção Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.
Kostix
fonte
6
simples e não depende de tailestar disponível em sua plataforma.
tenpn
8
& não mexe com a formatação / coloração git. Esta deve ser a resposta aceita x100
kuzyn 01 de
10
Não o que o operador queria: ele queria o first10, não o latest.
Timo
1
@Timo, possivelmente sim, mas a questão conforme declarada está aberta para interpretação, e muitas pessoas parecem acabar votando em minha resposta apenas por causa dessas diferenças abertas. Então, embora tecnicamente concorde com você, vamos mantê-lo como está, suponho ;-) Dentre as sugestões tecnicamente corretas, gosto mais do comentário de torek à resposta aceita.
kostix
@kostix "Como mostrar os primeiros 10 commit no git do começo ao fim" não está "aberto a interpretação" até onde eu estou preocupado. Obviamente, está pedindo os primeiros 10 commits, não os últimos .
Bobby Jack
29

Aqui está minha abordagem,

Para obter os primeiros 10 commits:

git log -n 10

-n é o número

Adicional Para obter os próximos 10 commit, ignore os 10 primeiros:

git log --skip=10 -n 10
Nayagam
fonte
Acho que essa deve ser a resposta aceita. Usar cauda fará com que --graph pare de funcionar em git log
relief.melone
Esta deve ser a resposta aceita. funciona como um encanto para mim
Doogle
você perde a cor da fonte no console usando cauda também. esta é a resposta certa
CESCO de
14

Para obter os últimos 10 commits:

git log HEAD~10..HEAD

Para colocá-los na ordem do mais antigo para o mais recente:

git log --reverse HEAD~10..HEAD

Observe que se houver mesclagens, isso pode mostrar mais de 10 confirmações; adicione --first-parentse quiser apenas atravessar o primeiro pai de cada ramo.

Para obter mais detalhes, consulte a documentação do git rev-list.


Edit: Você já obteve uma resposta útil acima para "mostrar commits perto do início do histórico" (novamente, veja as advertências sobre vários DAGs de commit não conectados em um repo). Mas você também pode fazer, por exemplo:

git log --no-walk `git rev-list HEAD | tail -n 10`

e:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

dependendo da ordem em que você deseja os resultados.

Torek
fonte
Obrigado pela sua resposta. Mas eu não preciso dos últimos 10 commits, mas dos primeiros. Para ser mais específico, se o commit for ABCDEFG (HEAD). Como registrar o ABC e como registrar o C pelo índice 2?
yohan zhou
Oh! Não há garantia de que haja um único "primeiro commit", mas se houver, consulte o link @CharlesB adicionado.
Torek em
O caminho pode ser trabalho. alguma forma natural? git log --pretty = oneline | wc -l git log HEAD ~ <O número menos um ou índice>
yohan zhou
Obrigado pela resposta. Isso é o que eu precisava para evitar as opções de estilo '-10' em meus aliases git. que aceitam argumentos numéricos.
vicTROLLA
11

o melhor resultado vem com a combinação das duas melhores respostas:

git log --pretty=oneline -10
andrej
fonte
1
Obrigado, eu uso isso como um alias do git para exibir rapidamente os commits recentes sem preencher meu terminal. Liguei para o alias lkj = log --pretty=oneline --abbrev-commit -10. Agora percebo que não responde à pergunta do OP, mas vim aqui procurando a troca de número simples.
Paul Rougieux
4

Basta registrar tudo reverso -1 significa listar um registro

git log  --reverse -1
nickleefly
fonte
2

eu usaria o comando de sintaxe simples abaixo;

git log -10 --oneline
RAVI PATEL
fonte
1
Acho que esta é a maneira mais eficiente!
Nishant
0

Porque ... mais detalhes: p

  1. Como mostrar os primeiros 10 commit no git do começo ao fim. (sem filial)
  2. Como especificar o índice de confirmação e registrá-lo. (mostrar o segundo ou terceiro)

Por (sem ramificação), você pode estar perguntando mais sobre a reflogcadeia de ancestrais do que sobre qualquer. O seguinte não tem nada a ver com o branch em que você está.

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -g é --walk-reflogs Em vez de percorrer a cadeia de ancestralidade do commit, percorra as entradas de reflog.
  • adicione |cut -d ' ' -f 2|tr -d ':' > logpara registrar apenas o índice de confirmação de reflog.

O seguinte mostrará os primeiros ancestrais do branch atualmente verificado.

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Produza os commits na ordem reversa.
  • Não pode usar simplesmente -n 10ou -10porque quebra--reverse
  • cat -n adiciona números de linha (índice de confirmação?)

aqui
fonte
0

Caso alguém queira mais do que apenas um log de uma linha do git:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

onde o 11no final deve ser definido para 1mais do que o número de commits que você deseja.

Como aqui indica git log --reverse -n 10, não funciona como você precisa. ( Suponho que precisaria ser não comutativo para lhe dar a capacidade de escolher os primeiros 10 commits na ordem reversa ou os últimos 10 commits 🤪)

Cameron Stone
fonte