RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

git diffで色々比較!

はじめに

こんにちは、新卒1年目のTKDSです。 今回はgitについて調べました! gitはよく使われているバージョン管理システムで、記事をご覧の皆さんも使ったことがあるのではないでしょうか? この記事では、diffコマンドのケース別の使い方について実際に試しながらご紹介します。

git diffとは?

gitにおいて、管理しているファイルの変更の差分が見れるのがdiffコマンドです。 gitの日本語リファレンスによると、

ワークツリーとインデックスまたはツリー間の変更、インデックスとツリー間の変更、2つのツリー間の変更、マージによる変更、2つのブロブオブジェクト間の変更、またはディスク上の2つのファイル間の変更を表示します。

と記述されています。
今回は一部のケースを紹介します。

準備

では、実際にディレクトリとファイルを作ってコマンドを試していきましょう。
まず、コマンドを試すための準備をします。

$ mkdir git-diff
$ cd git-diff
$ git init
$ touch a.txt
$ git add a.txt
$ git commit -m "add a.txt"
$ git switch -c diff-1
$ echo "change file." > a.txt

これで準備は完了しました。 次項から、ケースごとにコマンドを紹介します。

add前の変更の差分

図のように単純にファイルを変更した場合は、オプションなしのdiffコマンドで差分が確認できます。

$ git diff

次項のために、変更を反映しておきましょう。

$ git add -A
$ git commit -m "2. change file."

特定のコミットとadd前の変更との変更

次はコミットとdiffの差分を出します。

まず変更を加えます。

$ echo "変更と特定のコミットを比較する" >> a.txt

次にコミットのIDを調べます。

$ git log
commit 94d83c65c55c14008ec9af90abbf827ab572cf46 (HEAD -> diff-1)
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Thu Aug 24 23:12:39 2023 +0900

    2. change file.

commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed (main)
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Thu Aug 24 22:31:48 2023 +0900

    add a.txt

それぞれのコミットと差分を比べてみますしょう。

$ git diff 94d83c65c55c14008ec9af90abbf827ab572cf46
diff --git a/a.txt b/a.txt
index 9720d84..1e0a356 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 change file.
+変更と特定のコミットを比較する
$ git diff c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed
diff --git a/a.txt b/a.txt
index e69de29..1e0a356 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1,2 @@
+change file.
+変更と特定のコミットを比較する

このように、git diffにコミットIDを追記することで、特定のコミットとの差分を取ることができます。
今回した変更を追加しておきましょう。

$ git add -A
$ git commit -m "diff-1: change file."
[diff-1 17b9f12] diff-1: change file.
 1 file changed, 1 insertion(+)

特定のブランチと現在のブランチの状態の比較

ファイルに変更を加えます。

echo "ファイルに変更を加えます。" >> a.txt

ではmainブランチとの差分をとってみましょう。 mainブランチでのファイルの中身は空です。

git diffの引数にmainブランチを指定します。

$ git diff main 
diff --git a/a.txt b/a.txt
index e69de29..65005f7 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1,3 @@
+change file.
+変更と特定のコミットを比較する
+ファイルに変更を加えます。

これで、mainブランチとの差分を見ることができました。 また、addした内容を除いて、今いるブランチとの差分がみたい場合は--stagedをつけることで、差分が確認できます。

git diff --staged main 
diff --git a/a.txt b/a.txt
index e69de29..1e0a356 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1,2 @@
+change file.
+変更と特定のコミットを比較する

今回した変更を追加しておきましょう。

$ git add -A
$ git commit -m "diff-1: change file."

コミット間の変更

次はcommitとcommitの差分を比較します。

diff-1ブランチに戻ります。

$ git switch diff-1

ログを見て今までのコミット履歴を確認します。

$ git log
commit 03bbf93929733a4c59aba01f019f3518dad5757d (HEAD -> diff-1)
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Fri Aug 25 09:35:23 2023 +0900

    diff-1: change file.

commit 17b9f127dad5fd9a69d5a0e33deb30cb0e1da8ba
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Fri Aug 25 09:18:38 2023 +0900

    diff-1: change file.

commit 94d83c65c55c14008ec9af90abbf827ab572cf46
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Thu Aug 24 23:12:39 2023 +0900

    2. change file.

commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed (main)
Author: shun.takeda <shun.takeda@rakus.co.jp>
Date:   Thu Aug 24 22:31:48 2023 +0900

    add a.txt

引数にコミットIDを指定して差分を比較してみましょう。

$ git diff 03bbf93929733a4c59aba01f019f3518dad5757d 94d83c65c55c14008ec9af90abbf827ab572cf46
diff --git a/a.txt b/a.txt
index 65005f7..9720d84 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1 @@
 change file.
-変更と特定のコミットを比較する
-ファイルに変更を加えます。

これで、コミット間の差分を確認できました。

ブランチ間の変更

次はブランチ間の差分を比較します。

mainブランチに一度戻り、新たなブランチを作成します。

$ git switch -c diff-2 

次に新たなブランチで、変更をadd・commitします。

$ echo "1. 別のブランチで変更を記述" >> b.txt
$ echo "2. 別のブランチで変更を記述" >> b.txt
$ git add -A
$ git commit -m "diff-2 ファイルを追加"
[diff-2 3c7bdda] diff-2 ファイルを追加
 1 file changed, 2 insertions(+)
 create mode 100644 b.txt

元のブランチに戻ります。

$ git switch diff-1 

引数にブランチ名を指定することで、ブランチ間の差分を確認できます。 今回は、diff-1とdiff-2の差分を確認してみましょう。

git diff diff-1 diff-2
diff --git a/a.txt b/a.txt
index 65005f7..e69de29 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +0,0 @@
-change file.
-変更と特定のコミットを比較する
-ファイルに変更を加えます。
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..320e7b2
--- /dev/null
+++ b/b.txt
@@ -0,0 +1,2 @@
+1. 別のブランチで変更を記述
+2. 別のブランチで変更を記述

これでブランチ間の差分が確認できました。

まとめ

今回の記事では、git diffで色々な差分を確認してみました。普段よく使っているコマンドをよく知る機会になりました。他にもコマンドについても機会があれば調べてみたいと思います。 最後まで読んでいただきありがとうございました。

Copyright © RAKUS Co., Ltd. All rights reserved.