除了--name-flag
仅显示文件名之外,该命令(不带其他参数)还将显示索引和工作目录git diff
之间的差异(如此处的图表中所述)。
而该git status
命令将显示工作树的整个当前状态(暂存、修改、删除、未跟踪等的文件)
但是,通过考虑-s
缩短命令输出的标志status
(通常仅显示名称),我们可能会遇到某些情况,这两个命令将为您提供“几乎”完全相同的输出。这完全取决于您已经做了什么在你的工作目录中。
例如,如果您这样做,您将获得工作目录与您的工作目录以及您的包括git status -s
未跟踪文件的所有差异..(但假设您没有未跟踪文件..)HEAD
index
另一方面,无论您是否已经上演了什么,如果您这样做git diff --name-only HEAD
(请参见上述图表),您就有可能获得几乎相同的输出。
此外,结果几乎相同(不完全相同),因为git status -s
显示了非常有用的附加信息:
所以,我们可以认为diff
更适合查看实际文件内容的差异。这就是为什么不显示未跟踪的文件是diff
有意义的。仅从我们拥有的东西(跟踪的文件)开始比较差异。
话虽如此,如果您想要一些有关实际更改的简洁输出(毕竟这是使用 的合理性--name-only
),您应该真正考虑git status -s
.
一方面,git diff --name-only
返回准备在下一次提交时暂存的文件的名称。如下:
git diff --name-only
/src/main/java/com/core/First.java
/src/main/java/com/core/Second.java
Run Code Online (Sandbox Code Playgroud)
另一方面,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")
Run Code Online (Sandbox Code Playgroud)