# 10.切换版本

## 解释

Git 切换版本是指在一个 Git 仓库中切换代码库到不同的提交历史记录上。我们每使用 `commit` 提交一次，对于 Git 来说，就是新建了一个版本。Git 提供了 `checkout` 命令，帮助我们实现版本切换的功能。

这对于软件开发人员来说非常有用，因为我们可以：

* 查看代码库的早期版本：通过切换到旧的提交历史记录，开发人员可以查看代表项目过去状态的代码版本。这对于理解特定问题的起源或查看代码如何随时间演变很有用。
* 比较不同版本之间的更改：通过切换到两个不同的提交记录，开发人员可以比较两个版本之间的代码差异。这对于查找错误或检查某段代码的功能变化等情况非常有用。
* 回退到以前的版本：如果当前的代码库出现严重问题或错误，并且无法手动修复，开发人员可以切换回以前的版本，并从那里重新开始工作。

## 实验

我们进入终端，输入以下命令

```powershell
# 查看提交日志
$ git hist
* d7f681f 2023-05-05 | Added abc to the test.txt (HEAD -> master) [aku]
* 01b8702 2023-05-05 | Add first file [aku]

# 查看文件内容
$ cat .\test.txt
abc
```

我们可以看到之前实验提交的两条记录。同时打开 test 文件，观察文件状态。我们现在切回到第一次提交的版本，复制哈希值 `bc0c3f0`（请复制自己的哈希值）

```powershell
# 切换指定版本
$ git checkout 01b8702
Note: switching to '01b8702'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 01b8702 Add first file

$ cat .\test.txt

```

命令执行后，会给一段提示，告诉我们现在所处的状态以及我们可以操作的选项。之前 test 文件添加的 abc 已经没有了。我们还可以再切换回去，输入`git checkout master` 命令切换回最新版本。本节内容只需要大家掌握切换版本的功能，checkout 还有其它功能。
