2012-05-22 7 views
6

私は は、選択したコミットを表示するときにのみ変更されたファイルとして<path>、gitのリスト<path>を変更 コミットにログを制限するgit log --stat<path>引数を使用します。私は代わりに、すべてが に変更されたことを確認したいと思うでしょう。例えば`git log --stat - <path>` show * all *ファイルを選択したコミットにするには?

:二git logは、パス引数a.txtで、実際には "2つのファイルが変更さ" とき 、 "1つのファイルが変更され、" 言うことを

$ echo test > a.txt 
$ echo test > b.txt 
$ git add a.txt b.txt 
$ git commit -m test 
[...] 
2 files changed, 2 insertions(+), 0 deletions(-) 
[...] 
$ git log -n1 --stat 
[...] 

a.txt | 1 + 
b.txt | 1 + 
2 files changed, 2 insertions(+), 0 deletions(-) 
$ git log -n1 --stat -- a.txt 
[...] 

a.txt | 1 + 
1 files changed, 1 insertions(+), 0 deletions(-) 

注意。私は のa.txtb.txtの両方が、a.txtに基づいてコミットを選択したにもかかわらず、変更されたと言いました。

更新:@ jacknagelが私の質問に答えましたが、彼の解決策は私の実際の使用例では機能しません。私の実際のユースケースでは、関連する2つのプロジェクトが分岐した場合に、名前を含むファイルを変更したすべてのコミットを探しています。あるプロジェクトのどのような変更が、他のプロジェクトの対応する変更を示唆しているかを把握する必要があります。残念ながら、--full-diff--followを同時に使用しようとすると、gitが苦情を言います。

だから、私の実際の状況では、私が実行しようとしている:

git log --stat --follow -- a.txt 

をして、この場合に機能するソリューションです:あなたは、コマンドが動作するように期待するにはどうすればよい

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 
+0

あなたは私にはあまり意味がありませんお願いし、これまでどのような。あなたはコマンドが意図したのとは異なる方法で行動することをどのように期待していますか?ファイル名を指定すると、そのファイルの詳細だけを取得するようgitに指示します。両方のものを表示したい場合は、コマンドを使用してください。 – positron

+0

@positron:ファイル名を使用して関心のコミットを識別していますが、それらのコミットに対して完全な情報が必要です。本質的に、私は与えられたファイル名を使って他の*未知*のファイル名を特定しています。だから私は彼らが何であるか分からないので、 'git'に他のファイルを伝えることはできません。 – ntc2

+0

あなたの*質問*を編集して回答を追加するのではなく、自分の質問であっても、回答を追加するのがStackOverflowです。私は正解を追加する自由を取ったが、あなたが投稿した場合は喜んでそれを削除するだろう。 – djeikyb

答えて

9

の両方を表示したい場合は、--full-diffオプションを使用してこの動作を得ることができます。

--full-diff 
     Without this flag, "git log -p <path>..." shows commits that touch 
     the specified paths, and diffs about the same specified paths. With 
     this, the full diff is shown for commits that touch the specified 
     paths; this means that "<path>..." limits only commits, and doesn't 
     limit diff for those commits. 

     Note that this affects all diff-based output types, e.g. those 
     produced by --stat etc. 
+0

ありがとう!これは私が尋ねた質問に答えるので、私は答えを受け入れています。しかし、私の質問は、具体的ではなく、 '--full-diff'は' --follow'を使っている私の実際の状況では機能しません。私は質問を更新し、別の答えで '--follow'で動作する解決策を追加します。 – ntc2

-1

それは意図しているのとは異なる方法で?ファイル名を指定すると、そのファイルの詳細だけを取得するようgitに指示します。あなたはそれがファイルは、コマンドを使用し

git log -n1 --stat . 

または

git log -n1 --stat a.txt b.txt 
+3

私は考えていると思う "ちょうど私にはのタッチをコミットすることを示すが、それらのコミットを表示すると、リスト彼らがしたことすべて "。 – jacknagel

+0

@ジャックナエル:正確に。 – ntc2

0

まずコミットIDを検索しますxargs(またはgnu parallel)にパイプして、各IDをgit showに入力します。

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 

PowerShellを使用し、Windows上で、このような何かが(私は...それをテストし、まだしていない)動作するはずです:

git log --format='%H' --follow -- a.txt | ForEach-Object { git show --stat -C $_ } 
関連する問題