著者と日付を含むgitログからの可能な最短の出力


465

(少なくとも)この情報を使用してgitログ出力を表示するにはどうすればよいですか?

* author
* commit date
* change

ログエントリごとに1行に圧縮します。そのための可能な最短の形式は何ですか?

(試した--format=onelineが日付が表示されていない)


2
多分あなたは私の色のバージョンが好きです:stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

回答:


699

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

仕事をしました。これは出力します:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

stackoverflowの質問に触発された:「svn ls -vのようなgitログ出力」、私は私が必要とする正確なパラメーターを追加できることがわかりました。

日付を短縮するには(時間を表示しない)使用します --date=short

さまざまなオプションが何であるかが気になった場合:
%h=短縮されたコミットハッシュ
%x09=タブ(コード9の文字)
%an=作者名
%ad=作者の日付(形式は尊重--date =オプション)
%s= subject
From kernel.org/pub/software/scm /git/docs/git-log.html(PRETTY FORMATSセクション)はVivekのコメントです。


6
...そして、date=shortcdunn2001が提案するように、別の回答で追加することも有用です
JesperRønn-JensenJan

10
私のお気に入り(ショート)著者の前にスワップ日になりましたし、短い日付を使用oneliner:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
ジェスパーロン・ジェンセン

143
それを色でスパイスし、参照も表示します:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan

16
固定幅の列テーブル:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli郝海东冠状病六四事件法轮功

15
異なるオプションについて知りたければ、%h =簡略化されたコミットハッシュ、%x09 =タブ(コード9の文字)、%an =作成者名、%ad =作成者の日付(形式は--date =オプション)、 %s =件名。kernel.org/pub/software/scm/git/docs/git-log.htmlから(PRETTY FORMATSセクション)
Vivek

204

次の2つの.gitconfig設定を使用します。

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

%adは作成者の日付であり、.gitconfig --dateの[log]スタンザで指定されたオプションまたは指定されたオプションで上書きできます。相対的な日付が好きなのは、いつ行われたかがすぐにわかるからです。出力は次のようになります。

6c3e1a2 2 hours ago you@me.com lsof is a dependency now.
0754f18 11 hours ago you@me.com Properly unmount, so detaching works.
336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails
be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago you@me.com Shorten while loops

もちろんこれはすべてカラーなので、ログ行のさまざまな部分を簡単に区別できます。またgit log、[format]セクションのため、入力時のデフォルトです。

2014更新:gitがパディングをサポートするようになったので、上記のバージョンにすばらしい修正を加えました。

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

この右は相対的な日付を揃え、コミッター名は左に揃えます。つまり、見やすい列のような外観になります。

スクリーンショット

  ss#1

2016年の更新:GPGコミット署名が物事になりつつあるので、署名検証を含むバージョンでこの投稿を更新すると思いました(スクリーンショットでは、コミット直後のマゼンタ文字です)。フラグの簡単な説明:

%G ?:有効(有効)な署名には「G」、無効な署名には「B」、有効性が不明な有効な署名には「U」、署名なしには「N」を表示

その他の変更は次のとおりです。

  • 出力がtty以外のものである場合、色が削除されるようになりました(これはgreppingなどに役立ちます)。
  • git log -g 現在、reflogセレクターが含まれています。
  • refnamesの2つの括弧を保存し、それらを最後に配置します(列の配置を維持するため)
  • 相対日付が長すぎる場合は切り捨てます(例: 3 years, 4..
  • コミッター名を切り捨てます(一部のpplの場合は少し短い可能性があります。変更する%<(7,trunc)か、git .mailmap機能を確認してコミッター名を短くしてください)

これが設定です:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

すべての列の位置合わせは、一部の(うまくいけば)役に立たない文字を犠牲にして、はるかによく保持されるようになりました。改善点があれば自由に編集してください。コミットが署名されているかどうかに応じてメッセージの色を変更したいのですが、それが可能なatmではないようです。

スクリーンショット

git logのスクリーンショット


3
メールマップを使用すると、行をさらに短くできます。私は職場の同僚の名前を彼らのファーストネームだけに
短縮しました

2
--pretty形式の回答は適切で、tig回答は必要な構成なしで対話性を提供しますが、これは素晴らしいです-標準の 'git log'コマンドを使用して、要求された1行の出力(色が起動する!)を提供します。非常に素晴らしい。
ブレントファウスト

--right-leftを使用すると、> <マークが表示されなくなります。%mフォーマットへの追加を試み>ましたが、通常の場合でも毎回表示されgit logます。マークをフォーマットで正常に動作させる手がかりはありますか?
Vituel 2016年

1
@AlvaroCavalcanti確かに問題ありません!gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@TrầnViệtHoàngはの--onelineエイリアスです--pretty=onelineformat.prettyデフォルトのprettyフォーマットですが、format.onelineafaik をオーバーライドする方法はありません。私がやろうとしていることはpretty = shortlog、設定の行を省略し、実行するためのエイリアスを作成することgit log --pretty=shortlogです。
andsens

99
git log --pretty=format:"%H %an %ad"

--date=日付形式の設定に使用します

git log --pretty=format:"%H %an %ad" --date=short

1
すごい!次回はおそらく%Hよりも%hだけを使用します。ハッシュは人間の目には
意味がないからです。)

あなたの好きなように。私は簡単な例を示しただけです;)
knittl

2
涼しい!--date = shortについては知らなかった
JesperRønn-Jensen'09 / 09/20

3
これを捨てるだけ(8年遅れ):ハッシュは無意味に見えるかもしれませんが、コミットをチェリーピックしたり、コミットを比較したりする場合に便利なツールです。多くの場合、ハッシュは、意味があるためではなく、使用
stevendesu

81

これを自由に使ってください:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

-7最後の7つのエントリのみを表示するには、末尾のに注意してください。

見て:

ここに画像の説明を入力してください


3
--date=short短くするために追加できます。
xuhdev

@ハンネス、支店名はどこですか?
パセリエ

@Pacerierはgit log常に現在チェックアウトされているブランチの履歴を表示します。
Hannes Schneidermayer

%dような「参照名」を復元するために追加し(HEAD -> master)ます。
2540625

reset代わりになぜ使用するのautoですか?
2540625

49

tigは、主要なオープンソースの* nixディストリビューションで利用可能なgit logコマンドを使用する代わりの可能な方法です。

上のDebianやUbuntuは、次のようにインストールして実行してみてください:

$ sudo apt-get install tig

(tigがインストールされます)

$ tig

(ログはページャーに次のように表示され、現在のコミットのハッシュが下部に表示されます)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

マークダウンはテキストのカラーリングをサポートしていないので、想像してみてください。列2:緑; 列3:デフォルトのテキストの色。ハイライトされた最後の行。ヒットQまたはQを終了します。


tigASCIIのタブ(%x09)では保証されない、不揃いなエッジなしで揃えます。

短い日付形式の場合、大文字のDにヒットします(注:小文字のdはdiffビューを開きます。)show-date = short〜/ .tigrcに追加して永続的に構成します。または[tig] .git / configureまたは〜/ .gitconfigのセクション。

全体の変更を確認するに

  • ヒット入力します。ウィンドウの下半分にサブペインが開きます。
  • サブペインで変更をスクロールするには、kjキーを使用します。
  • 同時に、上矢印キーと矢印キーを使用し、コミットからコミットに移動ます。

tigはgitから独立しており、明らかに* nix固有であるため、おそらくcygwinをWindowsにインストールする必要があります。しかしためにFedora、私はコマンドをインストールすると信じています$ su(enter root password)# yum install tigFreeBSDの試み% su(enter root password)# pkg_add -r tig


ちなみに、tigは、ログをすばやく表示するだけでなく、スクリーンショットマニュアルにも適しています。


完全な例を提供してください。tigコンソールに書き込むとエラーが発生します-bash: tig: command not found
JesperRønn-Jensen2012

10
ワオ。このツールは素晴らしく、驚くほど高速です!ブリューインストールティグ
闘牛

Macを使用する場合は、brew install tig
Pedro Brasileiro

1
Windowsでは、babunユーザーは次のことができますpact install tig
obojdi

34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

または

git log --pretty=format:'%h %ad %s | %an' --date=short  

...上記のcdunn2001の回答をリッフィング:Jesperとknittlのように、著者の電子メールを失い、著者の名前だけを含めますが、読みやすいように出力を一定の幅の列に維持するというcdunn2001の考えに沿っています(いい案!)。ただし、著者名の左揃えの列の代わりに、そのフラグをコマンドの最後に括弧で囲むか、パイプでオフセットします。(実際には、出力を読み取る際の視覚的な助けとなる任意の文字である可能性があります...ただし、出力をディレクトリや何かと混同することを減らすために、バックスラッシュやフォワードスラッシュを回避することは理にかなっています。)

出力例:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac

31

定義済みのgitエイリアスを使用します。

$ git work

コマンドで1回作成:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

またはグラフでもっと色付け:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

ここに画像の説明を入力してください


ええ、私はこれが好きです!
Alex

8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

結果:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

固定幅のものが最初です。最も重要ではない部分(電子メールドメイン)は最後であり、簡単にフィルタリングできます。


4

プッシュする準備ができているステージング済みのコミットを表示するには

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

出力は次のようになります。

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

最初の列が黄色で表示され、括弧内の「H」「m」および「t」はHEAD、マスター、およびトランクを示し、通常の「-装飾」色で表示されます。

ここでは改行を使用しているため、何が行われているかを確認できます。

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

私は次のように「ステージング」のエイリアスを設定しています。

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(それをエスケープする簡単な方法はありますか?エスケープする必要があるものを見つけるのは少しトリッキーでした)


このスクリプトの現在のバージョンは〜300LOCで、さらに多くのことを実行します。¶-1行/複数行のコミットメッセージを切り替えるオプション¶-1行モードで行の空白/行の終わりを表示します。例えば:¶ -ハイライト問題# 's¶ - - param¶を経由して範囲を指定するハイライト/ ^ - (修|追加|リファクタリングを)/でmessages¶をコミット
サム・ハスラー

自動化された堅牢なエイリアス引用については、この回答を参照してください。300LOCを一目で共有したいですか?
トム・ヘイル

トム、ありがとう!そのスクリプトを投稿することに慣れた場合(機密情報や会社固有の情報を削除する必要があります)、ここでpingします。
Sam Hasler、2016年

1

前述のすべての提案では%s、件名にプレースホルダーを使用しています。書式設定により新しい行が保持され、複数行のコミットメッセージが押しつぶされたように見える%Bため、使用することをお勧めします。%s

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

0

これをプロジェクトフォルダーで実行します。

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

必要に応じて、次の行を〜/ .gitconfigに追加します。

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all

0

git log --pretty = fullerを試してみてください:それはあなたを表示します:-著者:著者日付:コミット:コミット日付:

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.