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.

JJD
źródło
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.

Gauthier
źródło
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?

9000
źródło
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/

atilkan
źródło
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
30

Spowoduje to wydrukowanie tylko wiadomości (tylko wiersz tematu) bez skrótu :

git log --pretty=format:%s
technofil
źródło
3
%sdla tematu; %bdla ciała; %Bdla obu („raw body” w git-scm.com/docs/pretty-formats )
Mathieu CAROFF
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ę).

Ten Brazylijczyk
źródło
8

Bez komunikatów zatwierdzania tylko skrót:

git log --pretty=oneline | awk '{print $1}'
otiai10
źródło
7
Jeśli chcesz tylko hash ...git log --pretty=format:"%H"
michael_j_ward
Jeśli chcesz tylko skrótu, możesz go również użyć git rev-list HEAD.
Fabio mówi o przywróceniu Moniki
-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

głośny
źródło
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,