gitコマンドの使い方 ~ git diff ~
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