git status和git diff --name-only有什么区别?

问题描述 投票:3回答:2

这两个命令似乎有选项,可以使它们显示相同的信息。

git
2个回答
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")

3
投票

除了仅显示文件名的--name-flag之外,git diff命令(没有其他参数)将显示索引和工作目录之间的差异(如in the diagaram here所述)。

git status命令将显示工作树的整个当前状态(分阶段,修改,删除,未跟踪等文件)

但是,通过考虑缩短-s命令(通常只显示名称)的输出的status标志,我们可以在某些情况下这两个命令将“几乎”给出完全相同的输出..这一切都取决于你已在您的工作目录中完成。

例如,如果您执行git status -s,您将获得工作目录与HEADindex的所有差异,包括未跟踪的文件..(但是说你没有未跟踪的文件..)

另一方面,无论你是否已经上演过,如果你做git diff --name-only HEAD(参见上面提到的图表),你有可能获得几乎相同的输出。

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

  • 该行开头的一封信总结了状态(M代表已修改,D代表已删除,A代表已添加,?代表未跟踪文件)
  • 一个颜色代码,显示已经上演的内容(绿色表示暂存,红色表示未上映)。

因此,我们可以认为diff更适合查看实际文件内容的差异。这就是为什么不通过diff显示未跟踪的文件是有道理的。比较差异从我们只有我们拥有的东西(被跟踪的文件)开始。

所有这一切,如果你想要一些关于你的实际变化的简明输出(毕竟这是使用--name-only的理性)你应该考虑git status -s

© www.soinside.com 2019 - 2024. All rights reserved.