2010-12-18 11 views
216

Próbuję dostosować format dla git log. Chcę, aby wszystkie zatwierdzenia były wyświetlane w jednej linii. Każda linia powinna pokazywać tylko pierwszy wiersz komunikatu zatwierdzenia.
I found out, że git log --pretty=short powinien zrobić lewę, ale na moim komputerze pokazuje pełny dziennik jako git log (oprócz znacznika czasu).Jak wypisać log git tylko z pierwszego wiersza?

Ponadto próbowałem użyć placeholders as defined in the man page. Mimo to nie mogłem znaleźć polecenia skracania komunikatu dziennika. Próbowałem tej linii git log --pretty=format:'%h : %s', która pokazuje skrócony hash %h i pełną wiadomość %s w jednym wierszu.

Używam git version 1.7.3.1.msysgit.0 w systemie Vista.


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

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

Więc z przykładów podano tylko chcę być wyprowadzane Added some functionality. poprzedzany przez hash shortend.

+0

'% s' jest przedmiotem, a nie pełny komunikat. –

+0

Trudno powiedzieć, czego naprawdę chcesz. "Krótki" format * nie jest * wszystko w jednym wierszu, chociaż (niespodzianka!) 'Oneline' jest. Jeśli 'oneline' i'% h:% s' nie są tym, czego potrzebujesz, co jest z nimi nie tak? W szczególności '% s' jest tematem, pierwszym wierszem komunikatu zatwierdzenia. To rzeczywiście powinna być wersja skrócona. Czy to możliwe, że robiłeś commity z pojedynczą długą linią do wiadomości i oglądasz je jakoś z zawijaniem słów? – Cascabel

+0

Całkowicie rozumiesz. Problem polega na tym, że 'oneline' i'% s' nie wyprowadzają tego, czego oczekujemy, przynajmniej na moim komputerze. Zaktualizowałem swój post z przykładem wiadomości o zatwierdzeniu. Może to pomaga. – JJD

Odpowiedz

353

Próbował pan jest?

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

Problem polega prawdopodobnie na tym, że brakuje ci pustego wiersza po pierwszym wierszu. Powyższe polecenie zazwyczaj działa dla mnie, ale właśnie testowałem na zatwierdzeniu bez pustej drugiej linii. Otrzymałem taki sam wynik jak ty: cała wiadomość w jednym wierszu.

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

Pierwsza linia komunikatu zatwierdzenia ma być krótkim opisem. Jeśli nie możesz zrobić tego w jednej linii, możesz użyć kilku, ale git uważa wszystko przed pierwszym pustym wierszem za "krótki opis". oneline drukuje cały krótki opis, więc wszystkie 3 wiersze.

+0

Dzięki! Rozwiązałeś zagadkę: nie mam pustego wiersza po pierwszym wierszu komunikatu zatwierdzenia, aby oddzielić temat od reszty. Niemniej byłoby miło, gdybym mógł go swobodnie umieścić lub pominąć. – JJD

+1

Bez problemu. W rzeczywistości możesz mieć pustą linię lub nie. Tyle tylko, że cała twoja wiadomość staje się krótką wiadomością, jeśli ją opuścisz. Podoba mi się ten krótki opis/szczegółowy opis, i przypuszczam, że ograniczenie do jednej linii dla krótkiego opisu było problemem, a więc wymaganiem pustej linii. Zawsze możesz wyprowadzać wyjście "git log" do skryptu filtrującego, ale naprawdę zalecałbym pisanie krótkiego opisu z pustą linią. – Gauthier

+1

Oto, czego teraz używam: https://gist.github.com/763735 – JJD

97

Czy git log --oneline robisz, co chcesz?

+0

Nie chcę, aby cała wiadomość zatwierdzenia została scalona w jedną linię. Chcę zobaczyć tylko pierwszy wiersz każdego komunikatu zatwierdzenia. – JJD

-7

jeśli chcesz, aby zawsze używać git log w taki sposób można dodać git alias przez

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

po tym git log wypisze co normalnie byłoby drukowane przez git log --oneline

+9

To faktycznie nie działa, ponieważ (aliasy git A. nie mogą zastępować wbudowanych nazw poleceń) i (B. Muszą być cytaty dookoła '" log --oneline "'). –

21

Można zdefiniować globalny alias, dzięki czemu można wywołać krótki dziennik w bardziej komfortowy sposób:

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

Następnie można wywołać go za pomocą git slog (działa nawet z autouzupełniania jeśli masz to włączone).

18

Lepsze i łatwiej git log poprzez alias. Wklej poniższy kod do terminala tylko jeden raz.

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" 

Wyjście

git lg 

Wyjście linie zmian

git lg -p 

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

+0

Przykład jest ładną demonstracją ładnego formatu, ale "Wklej poniższy kod do terminala tylko raz" wydaje się błędny, ponieważ nie tworzy on aliasu dla "git lg" – Drone2537

+0

@ Drone2537 Dzięki, poprawiłem. – atilkan

5

Bez popełniania wiadomości, tylko hash:

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

Jeśli chcesz tylko hash ... 'git log --pretty = format:"% H "' –

Powiązane problemy