繁体   English   中英

git status 和 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 ,您将获得工作目录与HEADindex所有差异,包括未跟踪的文件..(但假设您没有未跟踪的文件..)

另一方面,无论您是否已经上演了什么,如果您执行git diff --name-only HEAD (请参阅上图),则有可能获得几乎相同的输出。

此外,结果几乎相同(不完全相同),因为git status -s显示了非常有用的附加信息:

  • 行首的字母总结状态(M 表示已修改,D 表示已删除,A 表示添加,? 表示未跟踪的文件)
  • 显示已暂存内容的颜色代码(绿色表示暂存,红色表示未暂存)。

因此,我们可以认为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM