目录
当前位置: 首页 > 教程 > Git >

git status命令

精华
小牛编辑
137浏览
2023-03-14

git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log.

简介

git status [<options>…​] [--] [<pathspec>…​]

描述

显示索引文件和当前HEAD提交之间的差异,在工作树和索引文件之间有差异的路径以及工作树中没有被Git跟踪的路径。 第一个是通过运行git commit来提交的; 第二个和第三个是你可以通过在运行git commit之前运行git add来提交的。

git status相对来说是一个简单的命令,它简单的展示状态信息。输出的内容分为3个分类/组。

# On branch master
# Changes to be committed:  (已经在stage区, 等待添加到HEAD中的文件)
# (use "git reset HEAD <file>..." to unstage)
#
#modified: hello.py
#
# Changes not staged for commit: (有修改, 但是没有被添加到stage区的文件)
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#modified: main.py
#
# Untracked files:(没有tracked过的文件, 即从没有add过的文件)
# (use "git add <file>..." to include in what will be committed)
#
#hello.pyc

忽略文件(untracked文件)

没有tracked的文件分为两类. 一是已经被放在工作目录下但是还没有执行 git add 的, 另一类是一些编译了的程序文件(如.pyc, .obj, .exe等)。当这些不想add的文件一多起来, git status的输出简直没法看, 一大堆的状态信息怎么看?

基于这个原因。 Git让我们能在一个特殊的文件.gitignore中把要忽略的文件放在其中, 每一个想忽略的文件应该独占一行, *这个符号可以作为通配符使用。例如在项目根目录下的.gitignore文件中加入下面内容能阻止.pyc.tmp文件出现在git status中:

*.pyc
*.tmp

示例

以下是一些示例 -

在每次执行 git commit之前先使用git status检查文件状态是一个很好的习惯, 这样能防止你不小心提交了您不想提交的东西。 下面的例子展示 stage 前后的状态, 并最后提交一个快照.


# Edit hello.py
$ git status
# hello.py is listed under "Changes not staged for commit"
$ git add hello.py
$ git status
# hello.py is listed under "Changes to be committed"
$ git commit
$ git status
# nothing to commit (working directory clean)

第一个状态输出显示了这个文件没有被放到暂存区(staged)。git add将影响第二个git status的输出, 最后一个git status告诉我们没有什么能可以提交了,工作目录已经和最近的提交相匹配了。有些命令 (如, git merge) 要求工作目录是clean状态, 这样就不会不小心覆盖更新了。

git status命令可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件。下面来看看如下一个示例 -

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   2.txt
#
# 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:   1.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       1.log

上面输出结果中”Changes to be committed“中所列的内容是在索引中的内容,提交之后进入Git工作目录。
上面输出结果中“Changed but not updated”中所列的内容是在工作目录中的内容,git add之后将添加进入索引。
上面输出结果中“Untracked files”中所列的内容是尚未被Git跟踪的内容,git add之后进入添加进入索引。
通过git status -uno可以只列出所有已经被git管理的且被修改但没提交的文件。