Close

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 徽标
相关资料

Git 速查表

Bitbucket 徽标
查看解决方案

了解 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 status vs 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 为 3157e5ab91 的提交之间的所有内容。除了校验和外,分支名称(在分支模块中讨论)和 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 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up