簡體   English   中英

為什么git diff --name-only不顯示任何修改的文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM