回答:
注:変更されたファイルの名前(変更された行の行番号なし)を探しているだけの場合は、簡単にこのリンクをクリックして、別の回答を表示できます。
これには組み込みのオプションはありません(そして、それほど便利だとは思いません)が、「外部diff」スクリプトの助けを借りて、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 '^[<>-]'
"external diff"の詳細についてはGIT_EXTERNAL_DIFF
、gitマニュアルページの説明を参照してください(700行目付近、末尾にかなり近い)。
| grep -o '^[0-9]*'
は、右側を気にしないと仮定して、数値のみを提供します。
--diff-filter=...
どこ...
の部分はあなたが見たい変化の一種である:M
、修正のためのA
追加のために、D
あたりの削除、および他の人のためgit diff
のドキュメント。
とても簡単:
git diff --name-only
出て行って比較してください!
git diff --name-only master..HEAD
変更された行数などの行番号、または変更を含む実際の行番号?変更された行数が必要な場合は、を使用しますgit diff --stat
。これにより、次のような表示が得られます。
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
変更自体の行番号を取得するオプションはありません。
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:それは誰もがこのように答えなかったことを結んでいます。
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 -
3)最後に、本当にファイル名だけが必要な場合:
git diff --name-only
単に表示します:
new_file.txt
modified_file.txt
deleted_file
私はこれが古い質問であることを知っていますが、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
でgit version 2.17.1
、内蔵されたフラグが存在しない、この目的を達成するために。
次に、統一されたdiffからファイル名と行番号をフィルタリングするコマンドの例を示します。
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
たとえば、unified diff:
$ 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
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
:からマッチのファイル名diff --cc <filename>
からまたはmatch行番号@@@ <from-file-range> <from-file-range> <to-file-range>
やマッチの後にテキストを残り@@@
。sed -e '0~3{s/ @@@[ ]\?//}'
:@@@[ ]\?
前にオプションの1行のコンテキストを取得するには、3行ごとに削除します++<<<<<<< HEAD
。sed '2~3 s/$/\n1/g'
:\n1
列番号の2行目と3行目の間に3行ごとに追加します。sed "N;N;N;s/\n/:/g"
:3行ごとに:
。grep
素朴な解決策として使用します。
$ git diff | grep -A2 -- '---'
出力例:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
多分あなたは色付きの出力を見ることができます。それはあなたが簡単に出力を読むのに役立ちます。