[英]Why does “git log --name-only” show one file change, but “git diff” shows more?
[英]Why git diff --name-only does not show any modified files?
請注意(我正在使用posh-git):
C:\xyz\git [master ↑2 +27 ~0 -0 !]> git diff --name-only
C:\xyz\git [master ↑2 +27 ~0 -0 !]>
27個文件夾是未暫存的,每個文件夾都有一些文件。 沒有上演任何更改。
為什么不顯示任何文件?
編輯1
以下簡單的腳本演示了該問題:
C:\xyz> mkdir git
Directory: C:\xyz
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/16/2018 1:20 PM git
C:\xyz> cd git
C:\xyz\git> git init
Initialized empty Git repository in C:/xyz/git/.git/
C:\xyz\git [master]> echo hello > 1.txt
C:\xyz\git [master +1 ~0 -0 !]> git diff --name-only
C:\xyz\git [master +1 ~0 -0 !]> git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
1.txt
nothing added to commit but untracked files present (use "git add" to track)
C:\xyz\git [master +1 ~0 -0 !]>
編輯2
根據https://git-scm.com/docs/git-diff :
git diff [<options>] [--] [<path>…]
該表格用於查看您相對於索引(下一次提交的臨時區域)所做的更改。 換句話說,差異就是您可以告訴Git進一步添加到索引中的內容,但您仍然沒有。 您可以使用git-add [1]進行這些更改。
據我了解,這意味着上面成績單中的git diff --name-only
命令應列出1.txt
請注意, git diff
可以做很多不同的事情,包括(但不限於):
就像您在編輯中指出的那樣,您正在選擇最后一個選項。
當您選擇將索引與工作樹進行比較時,要比較的文件列表完全由索引內容控制。 取消跟蹤的所有文件將被完全忽略。 這與git status
將索引與工作樹比較的方式不同,但是由於git diff
不必查找任何可能無法跟蹤的文件(通常這是一個緩慢的操作),因此節省了大量時間。
如果您想讓Git使用某種占位符的索引條目來知道文件的存在,請考慮使用git add --indent-to-add
,或者簡稱為git add -N
(大寫N)。 我還要提到的是這種狀態(“假加”)是很長一段時間壞了,所以有許多的Git版本,它古怪的行為。 它也剛剛在2.19中更新,以更正git diff
輸出 :
- “ git diff”比較索引和工作樹。 對於添加了“意圖添加”位的路徑,該命令將顯示已添加的全部內容,但路徑本身未標記為新文件。 現在默認情況下它們顯示為新的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.