检查代码库

Git Status:检查存储库

git status

git status 命令显示工作目录和暂存区域的状态。它可以让您查看哪些变更已暂存,哪些尚未暂存,以及哪些文件未被 Git 跟踪。状态输出显示有关已提交项目历史记录的任何信息。为此,您需要使用 git log

相关的 git 命令

  • git tag
    • 标记是指向 Git 历史记录中特定点的引用。git tag 通常用于捕获用于标记版本发布的历史记录点(即 v1.0.1)。
  • git blame
    • git blame 的高级功能是显示附加到文件中特定提交行的作者元数据。这用于探索特定代码的历史记录并回答有关将代码添加到存储库的内容、方式和原因的问题。
  • git log
    • git log 命令显示已提交的快照。您可以使用该命令来列出项目历史记录、对其进行筛选并搜索特定的变更。

使用

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)

第一个状态输出会将文件显示为未暂存。git add 操作将反映在第二个 git status 中,最终的状态输出会告诉您没有什么要提交的——工作目录与最近的提交相匹配。某些 Git 命令(例如 git merge)要求工作目录保持干净,这样您就不会意外覆盖变更。

git log

git log 命令显示已提交的快照。您可以使用该命令来列出项目历史记录、对其进行筛选并搜索特定的变更。而使用 git status,您可以检查工作目录和暂存区域,git log 仅在已提交的历史记录上运行。

Git 教程: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>"

搜索特定作者的提交。 参数可以是普通字符串或正则表达式。

git log --grep="<pattern>"

使用与 匹配的提交消息(可以是普通字符串或正则表达式)搜索提交。

git log <since>..<until>

仅显示从 < since >< until > 之间发生的提交。这两个参数可以是提交 ID、分支名称、HEAD 或任何其他类型的修订版本引用

git log <file>

仅显示包含指定文件的提交。这是查看特定文件历史记录的简单方法。

git log --graph --decorate --oneline

有几个有用的选项可供考虑。--graph 标记将在提交消息的左侧绘制基于文本的提交图表。--decorate 添加所显示提交的分支或标记的名称。--oneline 在一行中显示提交信息,便于一目了然地浏览提交。

讨论

git log 命令是 Git 用于探索存储库历史记录的基本工具。当您需要查找项目的特定版本或弄清楚在功能分支中合并会带来哪些变化时,用这个最合适。

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith

其中大部分都非常简单,但是,第一行需要一些解释。commit 后 40 个字符的字符串是提交内容的 SHA-1 校验和。这有两个用途。首先,它确保了提交的完整性——如果提交被损坏,提交将生成不同的校验和。其次,它充当提交的唯一 ID。

这个 ID 可以用在像 git log .. 这样的命令中引用特定的提交。例如,git log 3157e..5ab91 将显示 ID 为 3157e5ab91 的提交之间的所有内容。除了校验和外,分支名称(在分支模块中讨论)和 HEAD 关键字是引用单个提交的其他常用方法。HEAD 总是引用当前提交,无论是分支还是特定提交。

~ 字符对于相对引用提交父项很有用。例如,3157e~1 引用的是 3157e 之前的提交,而 HEAD~3 是当前提交曾祖父项。

所有这些识别方法背后的理念都是让您根据特定的提交执行操作。git log 命令通常是这些交互的起点,因为它可以让您找到想要处理的提交。

示例

使用部分提供了许多 git log 示例,但请记住,可以将多个选项组合成一个命令:

git log --author="John Smith" -p hello.py

这将显示 John Smith 对 hello.py 文件所做的所有变更的完整比对。

.. 语法是比较分支非常有用的工具。下一个示例简要概述了 some-feature 中不在 main 中的所有提交。

git log --oneline main..some-feature

准备好学习 git status 了吗?

试用本交互式教程。

立即开始