Як вивести журнал git лише з першого рядка?


330

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

Далі я спробував використати заповнювачі, як визначено на сторінці "man" . Хоча я не зміг знайти команду скоротити повідомлення журналу. Я спробував цей рядок, 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підопічно ... (BTW math Q: які шанси на наступний біт у правильно закодованій послідовності хафмана, на рівні зберігання, увімкнено чи вимкнено? Підказка: Це === 50%.)
Фліп,

7
це було tx. О, також, я отримав повну сторінку s, тому я, природно, додав %для '%s'. С-;
Фліп

158

Робиш git log --onelineте, що ти хочеш?


1
Я не хочу, щоб все повідомлення про фіксацію було об'єднано в один рядок. Я хочу бачити перший рядок кожного повідомлення про фіксацію.
JJD

41

Кращий і простіший журнал git, зробивши псевдонім . Вставте код нижче до терміналу лише один раз за один сеанс. Вставте код в 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 до цього файлу bat, щоб також змінити рядки
Dheeraj Bhaskar


25

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

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

Потім ви можете зателефонувати за ним git slog(він навіть працює з автоматичним завершенням, якщо він увімкнено).


8

Без передачі повідомлень, лише хеш:

git log --pretty=oneline | awk '{print $1}'

7
Якщо ви хочете лише хеш ...git log --pretty=format:"%H"
michael_j_ward

Якщо ви хочете лише хеш, ви також можете використовувати git rev-list HEAD.
Фабіо каже

-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.