web-dev-qa-db-ja.com

Git logにsvn log -vのようなファイル名を表示させる方法

SVNのログには、 " - v"モードがあり、各コミットで変更されたファイルのファイル名を次のように出力します。

jes5199 $ svn log -v 
 --------------------------------------- --------------------------------- 
 r1 | --------------------------------- jes5199 | 2007-01-03 14:39:41 -0800(2007年1月3日水曜日) 1行
変更されたパス:
 A /AUTHORS [A] A /COPYING [A] C/ChangeLog [A]/EVOLUTION [A] IN 
 /MacOSX 

Gitの各コミットで変更されたファイルのリストを手早く取得する方法はありますか?

859
jes5199

変更されたファイルのフルパス名の場合

git log --name-only

フルパス名と変更されたファイルのステータスの場合

git log --name-status

省略形のパス名と変更されたファイルのdiffstatの場合:

git log --stat

もっとたくさんのオプションがあります、 ドキュメントをチェックしてください

1345
CB Bailey

注:git whatchangedは非推奨です。代わりにgit logを使用してください

新しいユーザは、代わりに git-log [1] を使用することをお勧めします。 whatchangedコマンドは本質的に git-log [1] と同じですが、デフォルトではrawフォーマットのdiff出力を表示し、マージをスキップします。

このコマンドは主に歴史的な理由で保管されています。 Linuxカーネルメーリングリストを読んでgit logが発明されるずっと前にGitを学んだ多くの人々の指がそれをタイプするように訓練されています。


各コミットで変更されたファイルのリストを(コミットメッセージとともに)取得するには、コマンドgit whatchanged --statを使用できます。

参考文献

139
mipadi

git showも素晴らしいコマンドです。

これはsvn diffのようなものですが、それをcommit guidに渡してその差分を見ることができます。

46
ptc

残りのコミットメッセージを使わずにファイル名だけを取得したい場合は、次のようにします。

git log --name-only --pretty=format: <branch name>

その後、ファイル名を含むさまざまなオプションを使用するように拡張できます。

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

この方法を使用するときに注意することの1つは、無視される必要がある空白行が出力にあることです。ローカルブランチで変更されているが、まだリモートブランチにプッシュされていないファイルや、リモートからの最新のファイルがすでに取り込まれているという保証がない場合は、これを使用すると便利です。 :

git log --name-only --pretty=format: my_local_branch --not Origin/master

ローカルブランチで変更されているが、まだリモートブランチのマスターブランチにマージされていないすべてのファイルを表示します。

41
Hazok

私は毎日これを使用して、変更されたファイルの履歴を表示します。

git log --stat --pretty=short --graph

短くするには、次のようにして.gitconfigにエイリアスを追加します。

git config --global alias.ls 'log --stat --pretty=short --graph'
35
xsor

私はこれを使う:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

ファイルのみのリストとその状態(追加、変更、削除)を出力します。

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...
15
Sofia

git diff --stat HEAD^!は、最後のコミットで変更されたファイルと追加/削除された行数を示します(HEAD)。

ファイル名だけで構成され、一度にいくつかのコミットについて追加された行数と削除された行数からなる簡潔な出力を得るための単一のコマンドがないように私は思われます。

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

例えばと呼ばれる。 HEADから./changed_files 99への簡潔な形式の変更を取得するためのHEAD~99。パイプで送ることができます。 lessへ。

7
nrz

以下は、コミットごとに変更されたファイルを簡潔な形式でリストするのに理想的な表示です。

git log --pretty=oneline --graph --name-status
0
Peter Suwara

別の便利なコマンドはgit diff-tree <hash>でしょう。ここでhashはハッシュ範囲でもあり得ます(<old>..<new>notationで表されます)。出力例

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

フィールドは以下のとおりです。

ソースモード、destモード、sourceハッシュ、destハッシュ、ステータス、ファイル名

ステータスはあなたが期待するものです: _ d _ (削除)、 _ a _ (追加)、 _ m _ (修正)などmanを参照完全な説明のためのページ。

0
Omer Dagan

私は通常ログを取得するためにこれらを使用します。

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"
0
Gaurav