Распечатать сообщение коммита данного коммита в git

244

Мне нужна сантехническая команда, чтобы напечатать сообщение о коммите одного данного коммита - ни больше, ни меньше.

Марк Пробст
источник
3
Если кто-то приходит сюда в поисках способа печати однострочного коммита, но не заботится о появлении хеша в начале, работает следующее:git show -s --oneline <commit>
waldyrious
Где мы должны добавить строку, чтобы напечатать сообщение коммита на сервере? Я имел в виду, какой файл хука?
Что вы подразумеваете под «сантехнической» командой?
Брайан Эш

Ответы:

332

Это не "сантехника", но она будет делать именно то, что вы хотите:

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

Если вам абсолютно необходима команда «сантехника» (вы не уверены, почему это необходимо), вы можете использовать rev-list:

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

Хотя rev-listв дополнение к сообщению о фиксации будет также выводиться сообщение sha (в первой строке).

mipadi
источник
4
У меня отлично %s%b%B
сработало
17
%Bправильный указатель (по крайней мере, в Git 1.7.2, не уверен, когда он был добавлен).
Мипади
2
%Bбыл добавлен после 1.7.1 (вероятно, в 1.7.1.1).
Мипади
1
Действительно это - Git 1.7.2, по-видимому. Большое спасибо!
Марк Пробст
Вы также можете использовать: $ git log --format=%B -n 1 <commit> | cat -Это даст вам сообщение коммита и никакой коммит ша, и вы можете «передать» его. Я на самом деле использую это как часть моего скрипта CI.
Пауло Муньос
138

git showэто больше, чем сантехническая команда git log, и имеет те же параметры форматирования:

git show -s --format=%B SHA1
CharlesB
источник
9
И если вы просто хотите первую строку («субъект»), используйте %sвместо %B.
ntc2
13
(Я предпочитаю это принятому ответу "log" или "rev-list", так как это операция с одним подтверждением, а не список, ограниченный 1 записью.)
Rich
17

Не сантехника, но у меня есть это в моем .gitconfig:

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

Это «последнее резюме» и «последнее сообщение». Вы можете предоставить коммит, чтобы получить сводку или сообщение об этом коммите. (Я использую 1.7.0.5, поэтому не имею% B.)

bstpierre
источник
Вы можете передать аргумент -n в качестве параметра. Таким образом, вместо возврата только последнего коммита вы можете сделать так, чтобы он возвращал последние 5 коммитов. Здесь необходимо изменить lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Нашел его здесь stackoverflow.com/questions/7005513/… Вы просто запускаете этот git lsum 5
kuklei
15

Это даст вам очень компактный список всех сообщений за любое указанное время.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT
Харшникет Сета
источник
4

Я начал использовать

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

Кажется быстрее чем

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

Оба дают одинаковый результат

н.у.к.
источник
1
Это показывает только первую строку (% s), а не все сообщение коммита («ни больше, ни меньше», как написал автор вопроса). Если у вас есть способ сделать show-branch с% B, то это было бы полезно.
Канонический Крис
3

Я использую шортлог для этого:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
мя
источник