Git Status:检查存储库
git status
git status
命令显示工作目录和暂存区域的状态。它可以让您查看哪些变更已暂存,哪些尚未暂存,以及哪些文件未被 Git 跟踪。状态输出不显示有关已提交项目历史记录的任何信息。为此,您需要使用 git log
。
相关的 git 命令
相关资料
Git 速查表
查看解决方案
了解 Bitbucket Cloud 的 Git
使用
git status
列出哪些文件已暂存、未暂存和未跟踪。
讨论
git status
命令是一个相对简单的命令。它只是向您展示了 git add
和 git commit
的情况。状态消息还包括暂存/取消暂存文件的相关说明。下面包括显示了 git status
调用的三个主要类别的示例输出:
# On branch main
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#modified: hello.py
#
# 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: main.py
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#hello.pyc
忽略文件
未跟踪的文件通常分为两类。要么是刚刚添加到项目中但尚未提交的文件,要么是编译后的二进制文件,比如 .pyc
、.obj
、.exe
等等。虽然将前者包含在 git status
输出中肯定是有益的,但后者可能很难看清存储库中到底发生了什么。
出于这个原因,Git 允许您通过在名为 .gitignore
的特殊文件中放置路径来完全忽略文件。您要忽略的任何文件都应包含在单独的行中,* 符号可用作通配符。例如,将以下内容添加到项目根中的 .gitignore
文件,这会阻止编译的 Python 模块出现在 git status
中:
*.pyc
示例
提交变更之前检查存储库的状态是一种很好的做法,这样您就不会意外提交一些您不想要的东西。此示例显示了暂存和提交快照之前和之后的存储库状态:
# 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)
The first status output will show the file as unstaged. The git add
action will be reflected in the second git status
, and the final status output will tell you that there is nothing to commit—the working directory matches the most recent commit. Some Git commands (e.g., git merge) require the working directory to be clean so that you don't accidentally overwrite changes.
git log
git log
命令显示已提交的快照。您可以使用该命令来列出项目历史记录、对其进行筛选并搜索特定的变更。而使用 git status
,您可以检查工作目录和暂存区域,git log
仅在已提交的历史记录上运行。
可以通过多种方式自定义日志输出,从简单地筛选提交到以完全用户定义的格式显示提交。下面介绍了 git log
的一些最常见配置。
使用
git log
使用默认格式显示整个提交历史记录。如果输出占用多个屏幕,则可以使用 Space
滚动并使用 q
退出。
git log -n <limit>
按
限制提交次数。例如,git log -n 3
将仅显示 3 次提交。
将每个提交压缩为一行。这对于获得项目的高级概述非常有用。
git log --oneline
git log --stat
除了普通的 git log
信息外,还包括哪些文件被修改以及每个文件中添加或删除的相对行数。
git log -p
显示代表每次提交的补丁。这显示了每次提交的完整比对,这是您可以看到的最详细的项目历史记录视图。
git log --author="<pattern>"
Search for commits by a particular author. The <pattern>
argument can be a plain string or a regular expression.
git log --grep="<pattern>"
Search for commits with a commit message that matches <pattern>
, which can be a plain string or a regular expression.
git log <since>..<until>
仅显示从 < since >
到 < until >
之间发生的提交。这两个参数可以是提交 ID、分支名称、HEAD
或任何其他类型的修订版本引用。
git log <file>
仅显示包含指定文件的提交。这是查看特定文件历史记录的简单方法。
git log --graph --decorate --oneline
有几个有用的选项可供考虑。--graph 标记将在提交消息的左侧绘制基于文本的提交图表。--decorate 添加所显示提交的分支或标记的名称。--oneline 在一行中显示提交信息,便于一目了然地浏览提交。
讨论
5. 检查文件状态。
commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith
其中大部分都非常简单,但是,第一行需要一些解释。commit
后 40 个字符的字符串是提交内容的 SHA-1 校验和。这有两个用途。首先,它确保了提交的完整性——如果提交被损坏,提交将生成不同的校验和。其次,它充当提交的唯一 ID。
这个 ID 可以用在像 git log
这样的命令中引用特定的提交。例如,git log 3157e..5ab91
将显示 ID 为 3157e
和 5ab91
的提交之间的所有内容。除了校验和外,分支名称(在分支模块中讨论)和 HEAD 关键字是引用单个提交的其他常用方法。HEAD
总是引用当前提交,无论是分支还是特定提交。
~ 字符对于相对引用提交父项很有用。例如,3157e~1
引用的是 3157e
之前的提交,而 HEAD~3
是当前提交曾祖父项。
示例
使用部分提供了许多 git log
示例,但请记住,可以将多个选项组合成一个命令:
git log --author="John Smith" -p hello.py
这将显示 John Smith 对 hello.py
文件所做的所有变更的完整比对。
.. 语法是比较分支非常有用的工具。下一个示例简要概述了 some-feature
中不在 main
中的所有提交。
git log --oneline main..some-feature
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。