gitコマンドの使い方 ~ git diff ~

2020年3月28日git-command

git diff コマンド概要

commitやファイルの差分を表示するコマンドです。

オプションの指定方法で3つのエリアを超えた比較ができる

  • 1. working-directoryとstaging-area
  • 2. satging-areaとcommit
  • 3. commitとcommit

git diff コマンドの使い方

git diff [オプション] [--] [file-path]

— file-pathを指定しない場合はcommitやエリア間の差分を表示しますが、– file-pathを指定した場合は指定したファイルを特定して差分を表示することができます。

git diffコマンドでよく使うオプションを次の通りです。

 

git diff オプション

オプションなし

working-directory(作業ディレクトリ)とstaging-area(ステージングエリア)の差分を表示します。

git diff [--] [file-path]
$ git diff
diff --git a/file-C.txt b/file-C.txt
index b2a7546..1feee01 100644
--- a/file-C.txt
+++ b/file-C.txt
@@ -1 +1,2 @@
 ccc
+ccc
ポイント

working-directory(作業ディレクトリ)に追加したファイルは差分として表示されません

–cached または –staged

staging-area(ステージングエリア)とcommitの差分を表示します。

git diff --cached [commit-hash] [--] [file-path]

commit-hashを省略した場合はHEADが指すcommitと比較されます。

$ git diff --cached
diff --git a/file-B.txt b/file-B.txt
index e8084e3..f761ec1 100644
--- a/file-B.txt
+++ b/file-B.txt
@@ -1,2 +1 @@
 bbb
-bbb

commit-hashを指定する場合、git logでcommit-hashを調べて比較する手順の例です。

$ git log --pretty=oneline
0e131df30584b3c671a9c1d6d33b7401a2022ed3 (HEAD -> master) file-B upd
5105e8123c3598794ed6c46702971cffc861d17c Merge branch 'develop'
137bd4bc1d64cc5d5eea4fc62511012403e42ae2 file-D.txt
3aa625ad77818ad3bce344cc895c796375e1e7c8 (develop) file-C add
6c8045d5347fedc536dfeb8ea7b5a0c6b5cd8660 fileB add
12a5485f15cff54a33f9dba6057b875432b7e593 file-A add

/c/Git/my-repo (master)
$ git diff --cached 3aa625ad77818ad3bce344cc895c796375e1e7c8
diff --git a/file-D.txt b/file-D.txt
new file mode 100644
index 0000000..1d60b70
--- /dev/null
+++ b/file-D.txt
@@ -0,0 +1 @@
+ddd

[commit-hash] [commit-hash] または [commit-hash]..[commit-hash]

commitとcommitの差分を表示します。

git diff [commit-hash] [commit-hash]

git diff [commit-hash]..[commit-hash]

commit-hashには以下のエイリアスを指定することもできます。

  • HEAD
  • branch ・・・ masterなど
  • remote-tracking-branch ・・・ origin/masterなど
  • tag
$ git diff master develop
diff --git a/file-B.txt b/file-B.txt
index e8084e3..f761ec1 100644
--- a/file-B.txt
+++ b/file-B.txt
@@ -1,2 +1 @@
 bbb
-bbb
diff --git a/file-D.txt b/file-D.txt
deleted file mode 100644
index 1d60b70..0000000
--- a/file-D.txt
+++ /dev/null
@@ -1 +0,0 @@
-ddd

また、「HEAD^」や「HEAD@{2}」などcommitからの相対位置で指定することもできます。

$ git diff HEAD@{2} HEAD
diff --git a/file-B.txt b/file-B.txt
index f761ec1..e8084e3 100644
--- a/file-B.txt
+++ b/file-B.txt
@@ -1 +1,2 @@
 bbb
+bbb

— [file-path]

— [file-path] は特定のファイルの差分を表示する場合に指定します。

$ git diff develop -- file-C.txt
warning: LF will be replaced by CRLF in file-C.txt.
The file will have its original line endings in your working directory
diff --git a/file-C.txt b/file-C.txt
index b2a7546..1feee01 100644
--- a/file-C.txt
+++ b/file-C.txt
@@ -1 +1,2 @@
 ccc
+ccc

–name-only

ファイル名だけを表示したい場合に–name-onlyオプションを指定します。

$ git diff develop --name-only
file-C.txt
file-D.txt

–no-index

working-directory(作業ディレクトリ)内のファイルを比較する場合に –no-index を指定します。

git diff --no-index [file-path] [file-path]

$ git diff --no-index file-A.txt file-B.txt
diff --git a/file-A.txt b/file-B.txt
index 72943a1..f761ec1 100644
--- a/file-A.txt
+++ b/file-B.txt
@@ -1 +1 @@
-aaa
+bbb

よく使う git diff の利用パターン

git add する前に差分を確認する

git addする前、つまりステージングエリアへ反映する前に変更内容を確認したい場合は、以下のコマンドで確認します。

commit対象としたいファイルを選別するなどの用途で利用します。

git diff

または

git diff -- [file-path]

git commit する前に最新のcommitとの差分を確認する

git commitする前に最新のcommitと比較する場合に以下のコマンドでファイルの差分を確認します。

commit-hashを指定しない場合、デフォルトでHEADのcommitと比較されます。

git diff --cached

または

git diff --cached -- [file-path]

git push する前に差分を確認する

git pushする前にリモートリポジトリ側のcommitの内容と比較する場合に、リモート追跡ブランチと比較して確認します。

ポイント

リモート追跡ブランチのcommitはあくまでローカルリポジトリにあるcommitです。

リモート側の最新のcommitと比較する場合は、git fetchコマンドで最新のcommitを取得した後にgit diffコマンドで確認するようにしましょう。

masterブランチの上流ブランチにorigin/masterが設定されている場合は、以下のコマンドで比較することができます。

git diff origin/master HEAD

ブランチとブランチの比較

git mergeする前に差分を確認する場合は以下のようにブランチとブランチを比較します。

例えば、masterブランチとdevelopブランチを比較する場合は以下のコマンドになります。

git diff master develop

git diff の全てのオプションを確認する方法

以下のコマンドを実行するとブラウザでgit diffのヘルプページが表示される

git diff --help

Gitコマンドの使い方一覧

git-command

Posted by snow