这两个命令似乎有选项,可以使它们显示相同的信息。
一方面,git diff --name-only
会返回文件的名称,这些文件已准备好在您要进行的下一次提交时暂存。如下:
git diff --name-only
/src/main/java/com/core/First.java
/src/main/java/com/core/Second.java
另一方面,git status
不仅为您提供了当前工作存储库中要暂存的文件的详细信息,还提供了与分支原点进行比较的状态。
git status
On branch myBranch
Your branch is up-to-date with 'origin/myBranch'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: /src/main/java/com/core/First.java
modified: /src/main/java/com/core/Second.java
no changes added to commit (use "git add" and/or "git commit -a")
除了仅显示文件名的--name-flag
之外,git diff
命令(没有其他参数)将显示索引和工作目录之间的差异(如in the diagaram here所述)。
而git status
命令将显示工作树的整个当前状态(分阶段,修改,删除,未跟踪等文件)
但是,通过考虑缩短-s
命令(通常只显示名称)的输出的status
标志,我们可以在某些情况下这两个命令将“几乎”给出完全相同的输出..这一切都取决于你已在您的工作目录中完成。
例如,如果您执行git status -s
,您将获得工作目录与HEAD
和index
的所有差异,包括未跟踪的文件..(但是说你没有未跟踪的文件..)
另一方面,无论你是否已经上演过,如果你做git diff --name-only HEAD
(参见上面提到的图表),你有可能获得几乎相同的输出。
此外,结果几乎相同(不完全相同),因为git status -s
显示了非常有用的附加信息:
因此,我们可以认为diff
更适合查看实际文件内容的差异。这就是为什么不通过diff
显示未跟踪的文件是有道理的。比较差异从我们只有我们拥有的东西(被跟踪的文件)开始。
所有这一切,如果你想要一些关于你的实际变化的简明输出(毕竟这是使用--name-only
的理性)你应该考虑git status -s
。