Open1
Git初心者がハマる!git diffで差分が出ない理由と解決法

gitはチーム開発×業務で毎日使っていたのですが、深く追求する事がなかったため不意に意図しない状況に陥ると都度調べてなんとか解決してきました
調べてすぐ解決できる程度であればまだしも中には複雑で状況が把握できず困った状況に覚えがあったため改めてShell操作(CLI)と SourceTreeで操作(GUI)でそれぞれgitの理解を深めようとしている。といった経緯があります
備忘録としてメモします
問題
git diff
はワーキングツリー(ローカルの作業ディレクトリ)とステージング(インデックス)の差分表示。
ワーキングツリーで作業、ワーキングツリーとステージングに差分があるにも関わらず検知しない
結果
git diff
が検知するのは追跡対象になっているファイルのみだから
検証
STEP1. ファイル新規作成
echo "testfile create" >> test.txt
STEP2.作成したファイルの状態を確認
git status
結果:test.txtは「Untracked files(未追跡ファイル)」状態なので、この段階ではgit diff
しても何も表示されません
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
STEP3.ファイルをaddしてステージングへ
git add test.txt
結果:addしたので「Changes to be committed」となり追跡対象ファイルになった事が分かります
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
※ git ls-files
でも確認できます(現在Gitが追跡しているファイル一覧)
作成ファイルは追跡対象ファイルになっていますが、ワーキングツリーとステージングのファイルに差がないため今git diff
しても何も表示されません。同じ内容のtest.txtが存在しているだけです
この段階で差分を確認したい場合はオプションをつける事でも確認できます。
# git diff --no-index /dev/null [対象ファイル]
git diff --no-index /dev/null test.txt
結果:
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..166645f
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+testfile create
STEP4.ワーキングツリー内ファイルを編集
echo "testfile edit" >> test.txt
これで追跡ファイルのワーキングツリーとステージングで差分が発生したのでgit diff
で差分が表示できます
diff --git a/test.txt b/test.txt
index 166645f..b4930e6 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
testfile create
+testfile edit