Как вывести git log только с первой строки?


330

Я пытаюсь настроить формат для git log. Я хочу, чтобы все коммиты отображались в одной строке. Каждая строка должна показывать только первую строку сообщения коммита.
Я узнал, что git log --pretty=shortдолжен сделать трюк, но на моем компьютере он показывает полный журнал, как git logи (кроме отметки времени).

Кроме того, я попытался использовать заполнители, как определено на странице руководства . Хотя я не смог найти команду, чтобы сократить сообщение журнала. Я попробовал эту строку, git log --pretty=format:'%h : %s'которая показывает закороченный хэш %hи полное сообщение %sв одной строке.

Я использую git version 1.7.3.1.msysgit.0на Vista.


Возможно, это как-то связано с тем, как я пишу свои коммит-сообщения. Вот пример:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Итак, в приведенном примере я хочу, чтобы вывод выводился Added some functionality.только перед кратким хешем.


1
%sэто тема, а не полное сообщение.
Джош Ли

Трудно сказать, чего ты на самом деле хочешь. shortФормат не на одной линии, хотя (сюрприз!) onelineЕсть. Если onelineи %h : %sне то, что вы хотите, что с ними не так? В частности, %sэто тема, первая строка сообщения коммита. Это действительно должна быть сокращенная версия. Возможно ли, что вы делали коммиты с одной длинной строкой для сообщения и просматривали их как-то с переносом слов?
Каскабель

Вы полностью понимаете. Проблема в том, что onelineи %sне выводить то, что мы ожидаем, по крайней мере, на моем компьютере. Я обновил свой пост примером моего сообщения коммита. Может быть, это поможет.
JJD

Ответы:


544

Вы пробовали это?

git log --pretty=oneline --abbrev-commit

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

Пустая вторая строка является стандартом в сообщениях git commit. Поведение, которое вы видите, возможно, было реализовано специально.

Первая строка сообщения о фиксации предназначена для краткого описания. Если вы не можете сделать это в одной строке, вы можете использовать несколько, но git считает все, что находится до первой пустой строки, «кратким описанием». onelineпечатает все краткое описание, так что все ваши 3 строки.


Спасибо! Вы раскрыли тайну: у меня нет пустой строки после первой строки в моем сообщении о коммите, чтобы отделить тему от остальных. Тем не менее, было бы хорошо, если бы я был свободен, чтобы вставить это или пропустить.
JJD

1
Нет проблем. На самом деле, вы можете иметь пустую строку или нет. Только то, что все ваше сообщение становится коротким, если вы его пропустите. Мне нравится это краткое описание / подробное описание, и я предполагаю, что ограничение в одну строку для краткого описания было проблемой, следовательно, требованием к пустой строке. Вы всегда можете перенаправить вывод git logв сценарий фильтрации, но я бы действительно рекомендовал написать краткое описание с пустой строкой.
Готье

89
Также есть git log --oneline --oneline - это встроенное сокращение для "--pretty = oneline --abbrev-commit", используемое вместе.
Джереми Логан

как избавиться от предварительно укороченного укороченного хэштега? Не то чтобы это не слишком красиво. Но без cut. Это было бы awkосторожно ... (Кстати, математика В: каковы шансы, что следующий бит в правильно закодированной последовательности Хаффмана, на уровне хранения, включен или выключен? Подсказка: это === 50%.)
Флип

7
это было это TX. Кроме того, у меня есть страница, полная s, поэтому я, естественно, добавил %для '%s'. C-;
Флип

158

Делай git log --onelineчто хочешь?


1
Я не хочу, чтобы все сообщение о коммите было объединено в одну строку. Я хочу видеть только первую строку каждого коммит-сообщения.
JJD

41

Лучше и проще сделать git log, сделав псевдоним . Вставьте приведенный ниже код в терминал всего один раз за один сеанс. Вставьте код в профиль zshrc или bash, чтобы сделать его постоянным.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Вывод

git lg

Вывод измененных строк

git lg -p

В качестве альтернативы (рекомендуется)
Вставьте этот код в глобальный файл .gitconfig.

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Дальнейшее чтение.
https://coderwall.com/p/euwpig/a-better-git-log
Расширенное чтение.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/


Пример - хорошая демонстрация довольно -форматного формата, но «Вставить приведенный ниже код в терминал всего один раз» кажется неправильным, потому что он не создает псевдоним для «git lg»
Drone2537

заметьте другим, если вы поместите эту команду в пакетном режиме, замените% на %%, замените «на». результат = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Вы можете передать -p в этот файл летучих мышей, чтобы также получить измененные строки
Дхирадж Бхаскар


25

Вы можете определить глобальный псевдоним, чтобы вы могли вызывать короткий журнал более удобным способом:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Затем вы можете вызвать его с помощью git slog(он даже работает с автодополнением, если он у вас включен).



-8

если вы хотите всегда использовать git logтаким образом, вы можете добавить псевдоним git с помощью

git config --global alias.log log --oneline

после этого git logнапечатает то, что обычно будет напечатаноgit log --oneline


12
Это на самом деле не работает, потому что (псевдонимы A. git не могут переопределить имена встроенных команд) и (B. Там должны быть кавычки "log --oneline").
Макс Нанаси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.