检查存储库
git状态
git status命令用于显示工作目录和分段区域的状态。它可以让您看到哪些更改已经暂停,哪些更改没有,哪些文件不被Git跟踪。输出的状态不会显示有关提交的项目历史记录的任何信息,为了获取提交历史纪录,您需要使用git log。
用法
git status
列出哪些文件已经暂存,哪些没有暂存和哪些未被追踪。
讨论
git status命令是一个相对简单的命令。它只是告诉您git add和git commit的命令是什么样子。状态消息还包括有关暂存/非暂存文件的相关说明。如下所示,显示了git status的三个主要类别的输出示例:
# On branch master
# 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日志
git log命令显示已提交的快照。它允许您列出项目历史记录,过滤它并搜索特定的更改。git status
允许您检查工作目录和暂存区域时,git log只对提交的的历史记录进行操作。
日志输出可以通过几种方式进行自定义,从简单的过滤提交到以完全用户定义的格式显示。一些最常见的git log配置如下所示。
用法
git log
使用默认格式显示整个提交历史记录。如果输出占用多个屏幕,则可以按下Space滚动,按下q退出。
git log -n <limit>
限制提交的数量
git log --oneline
冷凝每个提交到一行。这对于获得项目历史记录的高级概述很有用。
git log --stat
除了普通信息git log外,还包括哪些文件被更改,以及从每个文件中添加或删除的行的相对数量。
git log -p
显示代表每个提交的补丁。这显示了每个提交的完全差异,这是您可以拥有项目历史记录的最详细的视图。
git log --author="<pattern>"
搜索特定作者的提交。所述
git log --grep="<pattern>"
搜索与提交消息匹配的提交
git log <since>..<until>
仅显示
,或任何其他类型的修订引用。
git log <file>
只显示包含指定文件的提交历史。这是查看特定文件的历史的简单方法。
git log --graph --decorate --oneline
一些有用的选择要考虑。将在提交消息的左侧绘制提交文本的图形的–graph标志。–decorate添加了显示的提交的分支或标签的名称。–oneline在单行显示提交信息,使您更容易浏览提交。
讨论
git log命令是Git浏览存储库历史记录的基本工具。当您需要查找项目的特定版本时,可以使用它;或者在功能分支中合并来后确认发生了哪些更改,可以使用它。
commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith
大多数是非常简单的; 然而,第一行需要一些解释。40个字符的字符串commit是提交内容的SHA-1校验。这有两个目的。首先,它确保提交的完整性 - 如果它被破坏,则提交将生成不同的校验和。第二,它作为提交的唯一ID。
该ID可以用于git log
将显示ID 3157e和5ab91提交之间的所有内容。除了校验和之外,分支名称(在分支模块中讨论)和HEAD关键字是引用单个提交的其他常用方法。HEAD总是指当前的提交,无论是分支还是特定提交。
〜字符用于对提交的父项进行相对引用。例如,3157e~1指的是之前的commit 3157e,而且HEAD~3是当前commit的grand-grandparent。
所有这些识别方法背后的想法是让您根据特定的提交执行操作。该git log命令通常是这些交互的起点,因为它可以让您找到要使用的提交。
示例
用法部分提供了许多git log示例,但请记住,可以将多个选项组合到单个命令中:
git log --author="John Smith" -p hello.py
这将显示John Smith对hello.py文件所做的所有更改的完整差异。
..语法是比较分支的非常有用的工具。下一个示例显示了所有在some-feature但不在master的提交的概要。
git log --oneline master..some-feature