8

ログをコミットの変更に制限するために<path>引数を使用すると、選択したコミットを表示するときに、変更された唯一のファイルとしてgit リストが表示されます。代わりに、選択したコミットごとに変更されたすべてのパスを一覧表示したいと思います。git log --stat<path><path>

例えば:

$ 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(-)

git logパス引数を指定した 2 番目の ではa.txt、実際には「2 つのファイルが変更されました」が、「1 つのファイルが変更されました」と表示されることに注意してください。path に基づいてコミットを選択したにもかかわらず、a.txtとの両方が変更されたことを git に教えてもらいたいと思います。b.txta.txt

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

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

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

この場合に機能する解決策は次のとおりです。

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

3 に答える 3

12

--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.
于 2012-05-23T05:29:01.907 に答える
-1

コマンドが意図したものとは異なる方法で動作することをどのように期待しますか?ファイル名を指定すると、そのファイルの詳細だけを取得するようにgitに指示します。両方のファイルを表示したい場合は、コマンドを使用します

git log -n1 --stat .

また

git log -n1 --stat a.txt b.txt
于 2012-05-23T05:25:42.593 に答える