Лучший способ получить сообщение GIT commit с помощью короткого хэша?

Привет, ребята, я в настоящее время получаю сообщение о фиксации для определенного хеша фиксации, используя это ниже

hash='b55da97'
git log --pretty=oneline ${hash} | grep "${hash}" | awk '{ print $2 }'

Они кажутся крайне неэффективными, хотя есть ли более разумный способ сделать это, или я придерживаюсь grepping и awking?

Ответ 1

git log принимает (между прочим):

  • -n num, чтобы ограничить количество показанных транзакций: выберите 1 (и если num равно 9 или меньше, вы можете просто написать -num, следовательно, -1, для краткости)
  • --pretty=format:string with directives, чтобы изменить формат вывода журнала. Директива %s получает коммит "subject", что вы также получаете с помощью oneline.

Следовательно: git log -n 1 --pretty=format:%s $hash (или git log -1 --pretty=format:%s) выполнит трюк здесь.

Полный список директив формата см. в git документации журнала в разделе "PRETTY FORMATS" (примерно на полпути вниз).

Ответ 2

В зависимости от того, сколько из сообщения о фиксации вы действительно хотите, есть несколько довольно подробных спецификаций, которые вы можете использовать:

      ·  %s: subject
      ·  %f: sanitized subject line, suitable for a filename
      ·  %b: body
      ·  %B: raw body (unwrapped subject and body)

Так что-то вроде git log -1 --pretty=format:%b <hash>, или используйте один из других спецификаторов (думаю, %s, вероятно, ближе к тому, что вы сейчас делаете). -1 ограничивает git log только одним фиксатором, а не идет по дереву истории.

Ответ 3

Мне нравится иметь важные вещи, сбрасываемые в одну строку... Вот что я использую, построил другие ответы на этой странице:

git_log_for_commit.sh

IT=$(git log -1 --pretty=format:"%an, %s, %b, %ai"  $*)
echo "$IT"

Выход

jdoe, WORK1766032 - Added templating engine, WIP, 2013-08-15 14:25:59 +0000

Ответ 4

Это может привести к некоторому

git log --pretty=oneline ${hash} | awk '$0~var {print $2}' var="${hash}"