Imprimir mensagem de confirmação de um determinado commit no git

243

Preciso de um comando de encanamento para imprimir a mensagem de confirmação de um determinado envio - nada mais, nada menos.

Mark Probst
fonte
3
Se alguém vem aqui à procura de uma maneira de imprimir uma única linha cometer mensagem, mas não se preocupa com o hash aparecendo no início, as seguintes obras:git show -s --oneline <commit>
waldyrious
Onde devemos adicionar a linha para imprimir a mensagem de confirmação na máquina do servidor? Eu quis dizer qual arquivo de gancho?
O que você quer dizer com comando "encanamento"?
Bryan Ash

Respostas:

332

Não é "encanamento", mas fará exatamente o que você deseja:

$ git log --format=%B -n 1 <commit>

Se você precisa absolutamente de um comando "encanamento" (não sabe por que isso é um requisito), pode usar rev-list:

$ git rev-list --format=%B --max-count=1 <commit>

Embora rev-listtambém imprima o commit sha (na primeira linha), além da mensagem de commit.

mipadi
fonte
4
Funcionou perfeitamente para mim - mas eu usei %s%bem vez de %B(em uma caixa de Linux)
adamk
17
%Bé um especificador correto (pelo menos, no Git 1.7.2, não sabe quando foi adicionado).
Mipadi
2
%Bfoi adicionado algum tempo após 1.7.1 (provavelmente em 1.7.1.1).
Mipadi
1
De fato é - Git 1.7.2 aparentemente. Muchas gracias!
Mark Probst
Você também pode usar: $ git log --format=%B -n 1 <commit> | cat -Isso fornecerá a mensagem de confirmação e nenhuma confirmação de sha, e você poderá "canalizá-la". Na verdade, eu uso isso como parte do meu script de IC.
Paulo Muñoz
137

git showé mais um comando de encanamento do que git loge tem as mesmas opções de formatação:

git show -s --format=%B SHA1
CharlesB
fonte
9
E se você quiser apenas a primeira linha ("assunto"), use em %svez de %B.
ntc2 25/09/14
13
(Eu prefiro isso ao "log" aceite ou "lista rev" resposta, como é uma operação single-cometer, em vez de uma lista restrita a uma entrada.)
rico
17

Não encanamento, mas eu tenho estes no meu .gitconfig:

lsum = log -n 1 --pretty=format:'%s'
lmsg = log -n 1 --pretty=format:'%s%n%n%b'

Isso é "último resumo" e "última mensagem". Você pode fornecer uma confirmação para obter o resumo ou a mensagem dessa confirmação. (Estou usando o 1.7.0.5, então não tenho% B.)

bstpierre
fonte
Você pode passar o argumento -n como um parâmetro. Portanto, em vez de retornar apenas o último commit, você pode retornar os últimos 5 commit. Aqui a alteração necessária lsum = "! F () {git log -n $ 1 --pretty = formato: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Encontre-o aqui stackoverflow.com/questions/7005513/… Você acabou de executar este git lsum 5
kuklei
15

Isso fornecerá uma lista muito compacta de todas as mensagens por um tempo especificado.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT
Harshniket Seta
fonte
4

Eu comecei a usar

git show-branch --no-name <hash>

Parece ser mais rápido do que

git show -s --format=%s <hash>

Ambos dão o mesmo resultado

n
fonte
1
Isso mostra apenas a primeira linha (% s), não toda a mensagem de confirmação ("nada mais, nada menos", como o autor da pergunta). Se você tem uma maneira de fazer show-branch com% B, isso seria útil.
Canonical Chris
3

Eu uso shortlog para isso:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
mja
fonte