这两个命令似乎有选项,可以使它们显示相同的信息。
答案 0 :(得分:3)
除了仅显示文件名的--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
。
答案 1 :(得分:2)
一方面,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")