web-dev-qa-db-ja.com

変更したファイル名と行番号のみをgit diffに表示させることはできますか?

基本的に、変更されたコンテンツを表示するのではなく、ファイル名と行番号のみを表示します。

207
wei

注:名前を探しているだけ変更されたファイルの場合(without the 行番号変更された行)、 簡単です。別の回答へのリンクはこちらをクリックしてください


これには組み込みのオプションはありません(そして、私もそれがそれほど便利だとは思いません)が、gitでこれを行うことができます外部差分」スクリプト。

これはかなりくだらないものです。あなたが望むように出力を修正するのはあなた次第です。

#! /bin/sh
#
# run this with:
#    GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac

path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7

printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'

「外部diff」の詳細については、 gitマニュアルページGIT_EXTERNAL_DIFFの説明を参照してください(700行目付近、終わり近く)。

52
torek

とても簡単:

git diff --name-only

出て行って、diff!

685
phreakhead

変更された行数のような行番号、または変更を含む実際の行番号?変更した行数が必要な場合は、git diff --statを使用します。これにより、次のような表示が得られます。

[me@somehost:~/newsite:master]> git diff --stat
 whatever/views/gallery.py |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

変更自体の行番号を取得するオプションはありません。

59
ThiefMaster

git diff master --compact-summary

出力は次のとおりです。

 src/app/components/common/sidebar/toolbar/toolbar.component.html   |  2 +-
 src/app/components/common/sidebar/toolbar/toolbar.component.scss   |  2 --

これはまさにあなたが必要とするものです。コミットを行うとき、またはリモートから新しいコミットをプルするときと同じ形式。

PS:それは、誰もこのように答えなかったということです。

現在から特定のコミットまでの間に各ファイルで変更されたファイル名と行数/行数を表示します。

git diff --stat <commit-hash>
2
masterxilo

最もクリーンな出力、つまりファイル名/パスのみが付属しています

git diff-tree --no-commit-id --name-only -r

HTH

2
RedFred

私はこれが古い質問であることを知っていますが、Windowsでは、これはファイルへのgit出力をフィルタリングし、行番号を変更しました:

(git diff -p --stat) | findstr "@@ --git"

diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>

ファイルとそこから変更された行を抽出するには、もう少し手間がかかります。

for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f

a/dir1/dir2/file.cpp
47,7
98,7
2
Ger O'Donnell

1)私のお気に入り:

git diff --name-status

ファイルのステータスを前に付けます、例:

A   new_file.txt
M   modified_file.txt 
D   deleted_file.txt

2)統計が必要な場合:

git diff --stat

次のようなものが表示されます:

new_file.txt         |  50 +
modified_file.txt    | 100 +-
deleted_file         |  40 -

最後に、本当にファイル名だけが必要な場合:

git diff --name-only

単に表示されます:

new_file.txt
modified_file.txt
deleted_file
1
Feiteira

git diff toファイル間の各行

git diff --name-onlyは名前ファイルをリストします

0
mrjusepelo

git version 2.17.1では、組み込みフラグはありませんこの目的を達成します。

統合された差分からファイル名と行番号を除外するコマンドの例を次に示します。

git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'

たとえば、統合された差分:

$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
 +bar
++=======
+ foo
++>>>>>>> Commit message

結果は次のとおりです。

❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1

一般的なgrepの一致結果でコマンドの出力を一致させるには:

$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
  1. grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )diff --cc <filename>のファイル名に一致OR @@@ <from-file-range> <from-file-range> <to-file-range>の行番号に一致OR @@@の後の残りのテキストに一致。
  2. sed -e '0~3{s/ @@@[ ]\?//}':3行ごとに@@@[ ]\?を削除して、++<<<<<<< HEADの前にオプションの1行のコンテキストを取得します。
  3. sed '2~3 s/$/\n1/g':列番号の2行目と3行目の間に3行ごとに\n1を追加します。
  4. sed "N;N;N;s/\n/:/g":3行ごとに:で結合します。
0
Edgar Lee