私は返された情報からデータを収集してきました
git diff <commitId>..<commitId>
そして私は出会った@@ -1 +1 @@
それが何を意味するのか分かりません。Google で少し検索してみましたが、何も見つかりません。
ベストアンサー1
簡単な例の分析
形式は基本的にdiff -u
統合 diff と同じです。
たとえば次のことを考えてみましょう:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
どこ:
- 最初のファイルには
01
、02
から16
- 2番目のファイルには同じ内容が含まれていますが、行
02
、、が削除されています03
。14
15
差分出力:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
手段:
-1,6
これは、最初のファイルのこの部分が 1 行目から始まり、合計 6 行を示すことを意味します。したがって、1 行目から 6 行目までが表示されます。1 2 3 4 5 6
-
は「古い」という意味で、通常は と呼ばれますdiff -u old new
。+1,4
は、2 番目のファイルのこの部分が 1 行目から始まり、合計 4 行を表示することを意味します。したがって、1 行目から 4 行目までが表示されます。+
「新しい」という意味です。2 行が削除されたため、6 行ではなく 4 行だけになりました。新しいハンクは次のようになります。
01 04 05 06
@@ -11,6 +9,4 @@
2番目の塊も同様です。
古いファイルには、古いファイルの 11 行目から始まる 6 行があります。
11 12 13 14 15 16
新しいファイルには、新しいファイルの 9 行目から始まる 4 行があります。
11 12 13 16
前のハンクで 2 行目と 3 行目をすでに削除しているため、この行は
11
新しいファイルの 9 行目であることに注意してください。
ハンクヘッダー
@@
Git のバージョンと設定によっては、次の例のように、行の横にコード行が表示されることもありますfunc1() {
。
@@ -4,7 +4,6 @@ func1() {
-p
これはプレーンのフラグでも取得できますdiff
。
例: 古いファイル:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
行を削除すると6
、 diff は次のようになります。
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
これは の正しい行ではないことに注意してくださいfunc1
。行1
とがスキップされています2
。
この素晴らしい機能は、多くの場合、各ハンクがどの関数またはクラスに属しているかを正確に示し、差分を解釈するのに非常に役立ちます。
ヘッダーを選択するアルゴリズムがどのように機能するかについては、以下で詳しく説明されています。git diff hunk ヘッダーの抜粋はどこから来ているのでしょうか?
1行の要約表記
これは非常にまれですが、次の点を考慮してください。
diff -U0 <(seq -w 16) <(seq -w 16 | sed 's/10/hack/')
どこ:
-U0
: 0行のコンテキストを使用する- 2番目のファイル
10
はhack
その場合の diff 出力は次のようになります。
@@ -10 +10 @@
-10
+hack
したがって、1 行の変更がある場合、表記はペアではなく 1 つの数値のみを表示するように要約されることがわかりますm,n
。
この動作は、引用された文書に記載されています。トッドの答え:
ハンクに 1 行だけ含まれている場合は、開始行番号のみが表示されます。それ以外の場合、行番号は start,count のようになります。空のハンクは、ハンクに続く行から始まるとみなされます。
単一行のハンクの追加と削除は次のようになります。削除:
diff -U0 <(seq -w 16) <(seq -w 16 | grep -Ev '^(10)$')
出力:
@@ -10 +9,0 @@
-10
追加:
$ diff -U0 <(seq -w 16 | grep -Ev '^(10)$') <(seq -w 16)
出力:
@@ -9,0 +10 @@
+10
diff 3.8、Ubuntu 22.10 でテスト済み。