![](/img/trans.png)
[英]`git status` shows (between more) `git diff --cached --name-only` and `git diff --name-only`?
[英]What is the difference between git status and git diff --name-only?
这两个命令似乎有选项可以使它们显示相同的信息。
除了仅显示文件名的--name-flag
之外, git diff
命令(不带其他参数)将显示索引和工作目录之间的差异(如此处的图表中所述)。
而git status
命令将显示您的工作树的整个当前状态(已暂存、修改、删除、未跟踪等的文件)
然而,通过考虑缩短status
命令输出的-s
标志(通常只显示名称),我们可以在某些情况下这两个命令会给你“几乎”完全相同的输出。这一切都取决于什么你已经在你的工作目录中做了。
例如,如果您执行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
另一方面, 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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.