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.