这两个命令似乎有选项可以显示相同的信息。
--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")
git diff
比较分支和提交,而不会被细节淹没。git status
只会告诉您当前分支的情况。 - eadsjr