Git履歴と差分の確認コマンド解説

履歴と差分の確認

git log - コミット履歴の表示

リポジトリのコミット履歴を表示します。

オプション 説明
--oneline 各コミットを1行で表示
--graph ブランチとマージの履歴をASCIIグラフで表示
--decorate ブランチやタグなどの参照を表示
--all すべてのブランチのコミットを表示
-p, --patch 各コミットの差分も表示
-n <数> 表示するコミット数を制限
--author=<パターン> 特定の作者のコミットのみ表示
--since=<日付>, --after=<日付> 指定した日付以降のコミットを表示
--until=<日付>, --before=<日付> 指定した日付以前のコミットを表示

例:

git log - コミット履歴を表示
git log --oneline - 簡潔な形式でコミット履歴を表示
git log --oneline --graph --all - すべてのブランチのコミット履歴をグラフ形式で表示
git log -p - 各コミットの差分も含めて表示
git log -n 5 - 最新の5つのコミットのみ表示
git log --author="John" - Johnが作成したコミットのみ表示
git log --since="2023-01-01" - 2023年1月1日以降のコミットを表示
git log file.txt - 特定のファイルに関するコミット履歴を表示

git diff - 変更内容の表示

ファイルの変更内容を表示します。

オプション/引数 説明
(引数なし) 作業ディレクトリとステージングエリアの差分
--staged, --cached ステージングエリアと最新のコミットの差分
<コミット1> <コミット2> 2つのコミット間の差分
--name-only 変更されたファイル名のみを表示
--name-status 変更されたファイル名と変更タイプ(追加/修正/削除)を表示
--color-words 単語単位で差分を色付け

例:

git diff - 作業ディレクトリとステージングエリアの差分を表示
git diff --staged - ステージングエリアと最新のコミットの差分を表示
git diff HEAD - 作業ディレクトリと最新のコミットの差分を表示
git diff HEAD~1 HEAD - 最新のコミットと1つ前のコミットの差分を表示
git diff main feature - mainブランチとfeatureブランチの差分を表示
git diff -- file.txt - 特定のファイルの差分のみを表示

diffの出力の読み方

git diffコマンドの出力を理解することは、変更内容を正確に把握するために重要です。以下にdiff出力の基本的な読み方を説明します。

diff出力の基本構造

diff --git a/ファイル名 b/ファイル名
index ハッシュ1..ハッシュ2 モード
--- a/ファイル名
+++ b/ファイル名
@@ -開始行,行数 +開始行,行数 @@ コンテキスト情報
- 削除された行
+ 追加された行
 変更されていない行
            
  • diff --git a/ファイル名 b/ファイル名: 比較対象のファイル名を示します。aが変更前、bが変更後です。
  • index ハッシュ1..ハッシュ2 モード: ファイルのオブジェクトIDとファイルモードを示します。
  • --- a/ファイル名: 変更前のファイルを示します。
  • +++ b/ファイル名: 変更後のファイルを示します。
  • @@ -開始行,行数 +開始行,行数 @@: 変更箇所の位置情報です。
    • -開始行,行数: 変更前のファイルでの開始行と行数
    • +開始行,行数: 変更後のファイルでの開始行と行数
  • - で始まる行: 削除された行です。
  • + で始まる行: 追加された行です。
  • 空白で始まる行: 変更されていない行(コンテキスト)です。

diff出力の例

diff --git a/example.txt b/example.txt
index abc1234..def5678 100644
--- a/example.txt
+++ b/example.txt
@@ -1,5 +1,6 @@
 これは変更されていない行です。
-これは削除された行です。
+これは追加された行です。
+これはもう一つ追加された行です。
 これも変更されていない行です。
-これも削除された行です。
+これは変更された行です。
 最後の変更されていない行です。
            

この例では:

  • 1行目は変更されていません。
  • 2行目は削除され、代わりに新しい行が追加されています。
  • 3行目に新しい行が追加されています。
  • 4行目は変更されていません。
  • 5行目は削除され、新しい内容に変更されています。
  • 6行目は変更されていません。