Jak wyprowadzić dziennik git tylko z pierwszym wierszem?


330

Próbuję dostosować format git log. Chcę, aby wszystkie zatwierdzenia były wyświetlane w jednym wierszu. Każdy wiersz powinien pokazywać tylko pierwszy wiersz komunikatu zatwierdzenia.
I okazało się, że git log --pretty=shortpowinno wystarczyć, ale na moim komputerze to pokazuje pełny raport jak git logrobi (oprócz znacznika czasu).

Ponadto próbowałem użyć symboli zastępczych zdefiniowanych na stronie podręcznika man . Chociaż nie mogłem znaleźć polecenia skracającego dziennika. Wypróbowałem ten wiersz, git log --pretty=format:'%h : %s'który pokazuje skrót skrótu %hi pełny komunikat %sw jednym wierszu.

Korzystam git version 1.7.3.1.msysgit.0z systemu Vista.


Może ma to coś wspólnego ze sposobem, w jaki piszę moje komunikaty zatwierdzania. Oto przykład:

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

Tak więc w podanym przykładzie chcę, aby wynik był Added some functionality.poprzedzony skrótem skrótu.


1
%sjest tematem, a nie pełną wiadomością.
— Josh Lee

Naprawdę trudno powiedzieć, czego naprawdę chcesz. Jednak shortformat nie jest w jednej linii (niespodzianka!) oneline. Jeśli onelinei %h : %snie chcesz, co jest z nimi nie tak? W szczególności %sjest to temat, pierwszy wiersz komunikatu zatwierdzenia. To powinna być rzeczywiście skrócona wersja. Czy to możliwe, że dokonujesz zatwierdzeń za pomocą jednej długiej linii dla wiadomości i przeglądasz je w jakiś sposób za pomocą zawijania słów?
— Cascabel,

Całkowicie rozumiesz. Problem polega na tym, że onelinea %snie wyjście, czego oczekujemy, przynajmniej na moim komputerze. Zaktualizowałem swój post za pomocą przykładu mojej wiadomości zatwierdzenia. Może to pomaga.
— JJD,

Odpowiedzi:


544

Próbowałeś tego?

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

Problem polega na tym, że brakuje pierwszego pustego wiersza. Powyższe polecenie zwykle działa dla mnie, ale właśnie przetestowałem zatwierdzenie bez pustej drugiej linii. Mam taki sam wynik jak ty: cała wiadomość w jednym wierszu.

Pusta druga linia jest standardem w komunikatach git commit. Zachowanie, które widzisz, zostało prawdopodobnie zaimplementowane celowo.

Pierwszy wiersz komunikatu zatwierdzenia ma być krótkim opisem. Jeśli nie możesz zrobić tego w jednym wierszu, możesz użyć kilku, ale git uważa wszystko przed pierwszym pustym wierszem za „krótki opis”. onelinewypisuje cały krótki opis, więc wszystkie 3 wiersze.


Dzięki! Rozwiązałeś zagadkę: nie mam pustej linii po pierwszym wierszu w moim komunikacie zatwierdzenia, aby oddzielić temat od reszty. Byłoby jednak miło, gdybym mógł go włożyć lub pominąć.
— JJD,

1
Nie ma problemu. W rzeczywistości możesz mieć pustą linię, czy nie. Tyle że cała twoja wiadomość staje się krótką wiadomością, jeśli ją pominiesz. Podoba mi się ten krótki opis / szczegółowy opis i przypuszczam, że ograniczenie do jednej linii dla krótkiego opisu było problemem, stąd wymóg dotyczący pustej linii. Zawsze można przesyłać dane wyjściowe git logdo skryptu filtrującego, ale naprawdę zalecałbym napisanie krótkiego opisu z pustą linią.
— Gauthier

89
Istnieje również git log --oneline --oneline jest wbudowanym skrótem dla „--pretty = oneline --abbrev-commit” używanych razem.
— Jeremy Logan

jak pozbyć się skrócony hashtag? Nie to, że nie jest ładnie zapakowane. Ale bez cut. To byłoby awktotem ... (BTW matematyka P: jakie są szanse, że następny bit w prawidłowo zakodowanej sekwencji huffmana na poziomie magazynu jest włączony lub wyłączony? Wskazówka: To === 50%.)
— Phlip

7
to było tx. Och, też mam stronę pełną s, więc naturalnie dodałem %dla '%s'. DO-;
— Phlip

158

Czy git log --onelinerobisz co chcesz?


1
Nie chcę, aby cały komunikat zatwierdzenia był scalony w jedną linię. Chcę zobaczyć tylko pierwszy wiersz każdej wiadomości zatwierdzenia.
— JJD,

41

Lepszy i łatwiejszy dziennik git, tworząc alias . Wklej poniższy kod do terminala tylko raz na jedną sesję. Wklej kod do zshrc lub profilu bash, aby był trwały.

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"

Wynik

git lg

Wyjście zmienione linie

git lg -p

Alternatywnie (zalecane)
Wklej ten kod do globalnego pliku .gitconfig

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

Dalsza lektura.
https://coderwall.com/p/euwpig/a-better-git-log
Advanced Reading.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/


Przykładem jest ładna wersja ładnego formatu, ale „Wklej poniższy kod do terminala tylko raz” wydaje się błędna, ponieważ nie tworzy aliasu dla „git lg”
— Drone2537

Uwaga dla innych, jeśli wstawisz to polecenie we wsad, zamień% na %%, zamień „na” ”. wynik = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Możesz przekazać -p do tego pliku nietoperzy, aby uzyskać również zmienione linie
— Dheeraj Bhaskar


25

Możesz zdefiniować globalny alias, aby móc wywoływać krótki dziennik w bardziej komfortowy sposób:

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

Następnie możesz wywołać go za pomocą git slog(działa nawet z autouzupełnianiem, jeśli masz włączoną funkcję).



-8

jeśli chcesz zawsze używać git logw taki sposób, możesz dodać alias git przez

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

po tym git logwydrukuje to, co normalnie byłoby wydrukowane przezgit log --oneline


12
To tak naprawdę nie działa, ponieważ (aliasy git nie mogą zastąpić wbudowanych nazw poleceń) i (B. W pobliżu muszą znajdować się cudzysłowy "log --oneline").
— Max Nanasy,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.