> For the complete documentation index, see [llms.txt](https://alanmpan.gitbook.io/git-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://alanmpan.gitbook.io/git-learning/git/02.git-de-te-xing.md).

# 02.Git的特性

## 以快照的方式存储

在 Git 中，每次提交都会创建一个新的快照，该快照包含了当前项目目录中所有文件和子目录的完整副本。这意味着用户可以轻松地浏览项目的任何历史版本，并且可以很容易地恢复到以前的某个特定版本。

当用户对项目进行更改时，Git 会计算出文件的差异并将其存储为新的快照。如果文件没有被修改，则 Git 只是链接到之前的版本，从而提高了存储效率和速度。

由于 Git 使用快照来管理项目的版本，因此它比其他版本控制系统具有许多优势，包括：

1. 更快的速度：由于 Git 存储文件的差异而不是整个文件，因此它能够更快地执行操作，如提交、分支、合并等。
2. 更少的存储空间：由于 Git 只存储文件的差异，因此它需要比其他版本控制系统更少的存储空间来存储项目的历史记录。
3. 更容易的备份和恢复：由于 Git 存储每个版本的整个项目目录状态快照，因此它可以轻松地进行备份和恢复操作。

## 几乎所有操作都是本地执行

Git 几乎所有操作都可以在本地执行。由于 Git 是一款分布式版本控制系统，每个开发人员都拥有一个完整的代码副本，并且可以在本地进行更改和提交。这使得 Git 可以快速、高效地处理大量的操作，而不需要频繁地从远程存储库获取数据。

以下是一些在本地执行的 Git 操作：

1. 初始化仓库：可以在本地文件系统上创建一个新的 Git 仓库，无需与任何远程存储库通信。
2. 添加和删除文件：可以在本地文件系统上添加、删除和重命名文件，然后将更改提交到本地 Git 仓库。
3. 提交更改：可以在本地 Git 仓库中提交更改，记录当前工作目录的状态快照。
4. 切换分支：可以在本地切换分支，无需从远程存储库获取数据。
5. 合并分支：可以在本地将一个分支的更改合并到另一个分支中，无需与远程存储库通信。
6. 查看历史记录：可以在本地查看项目历史记录，包括提交、分支等信息。
7. 回滚更改：可以在本地回滚之前的提交，恢复到之前的状态。
8. 推送和拉取更改：虽然将更改推送到远程存储库和从远程存储库拉取更改是必要的，但这些操作其实是在本地执行的。

## 保证数据完整性

在 Git 中，每个文件或目录在存储之前都会被生成一个校验和并以此来标识。这意味着如果没有通知 Git，不能更改任何文件或目录的内容。Git 在其哲学最深层次内内置了这种机制，并且确保数据的完整性。这也就意味着，在传输中不会损失信息或出现文件损坏而不被 Git 检测到。

Git 使用 SHA-1 哈希作为校验和生成算法。这是一个由十六进制字符（0-9 和 a-f）组成的 40 位字符串，基于存储在 Git 中文件或目录结构的内容计算得出。SHA-1 哈希值看起来像这样：

```hash
24b9da6552252987aa493b52f8696cd6d3b00373
```

在 Git 中，你会经常看到这些哈希值，因为 Git 在存储时使用它们。事实上，在 Git 中，文件名并不重要，重要的是内容的哈希值，它可以唯一地标识某个文件。

哈希函数是一种单向函数，它将输入数据转换为一个固定长度的哈希值，并且该过程不可逆，还可以用于数据索引或加密等领域。

## 一般只添加数据

在 Git 中执行操作时，几乎所有操作都只是将数据添加到 Git 数据库中。很难让系统执行任何不可撤消的操作或者以任何方式擦除数据。和其他版本控制系统一样，您可能会在提交之前丢失或损坏尚未提交的更改，但是如果您经常将数据库推送到另一个仓库，那么在 Git 中提交快照后，非常难以失去这些提交，这使得使用 Git 变得非常愉快。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://alanmpan.gitbook.io/git-learning/git/02.git-de-te-xing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
