コミット内の全ファイルをリストアップするには?

私が探しているのは、シンプルなgitコマンドで、そのコミットの一部であるすべてのファイルを、余計な情報を含まずにハッシュ(SHA1)で指定して、きれいなフォーマットのリストを提供するものです。

私が試したのは

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

ファイルをリストアップしていますが、それぞれに不要なdiff情報も含まれています。

git showの出力から解析しなくて済むように、必要なリストだけを提供する別のgit` コマンドはありますか?

ソリューション

Preferred Way(配管系のコマンドなので、プログラム的な意味合いが強い)。

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

別の方法(_porcelain_コマンドなので、スクリプトではあまり好まれません;ユーザーフレンドリーであることを意味します

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id は、コミット ID の出力を抑制します。
  • --pretty 引数では、空のフォーマット文字列を指定して、先頭のゴミを回避します。
  • --name-only 引数では、影響を受けたファイル名のみを表示します (Thanks Hank)。各ファイルに何が起こったかを確認したい場合は、代わりに --name-status を使用してください (Deleted, Modified, Added)。
  • -r はサブツリーに再帰するための引数です。
解説 (24)

このためにgitkが望まれていないのだと思っておきます。その場合には、git show --name-onlyを試してみてください。

解説 (3)

git show --stat`"(Ryanに感謝)といくつかのsedコマンドの組み合わせで、データを整理することができます。(Ryanに感謝)といくつかのsedコマンドを組み合わせれば、データを切り詰めることができます。

git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

これで、変更されたファイルのリストだけが表示されます。

解説 (0)