1. 介绍
工作区(Working Directory)
工作区是我们进行代码编写和文件操作的地方。比如,在一个名为learngit的项目中,learngit文件夹就是工作区,我们在这里创建文件、编写代码等操作都属于工作区操作。
暂存区(Staging Area)
暂存区是一个临时保存改动的地方。通过 git add 命令可以将工作区的文件修改添加到暂存区,准备提交到版本库。执行 git commit 命令后,暂存区的内容会被清空。
版本库(Repository)
版本库是Git最核心的部分,包含了项目的元数据和对象数据库。当我们在项目目录执行 git init 后,Git会创建一个隐藏目录 .git,这个目录就是版本库。版本库中包含了暂存区(也称为stage或index)、默认创建的第一个分支master,以及指向master的HEAD指针。
小结
将文件添加到Git版本库的操作分为两步:
- 使用
git add将文件修改添加到暂存区。 - 使用
git commit将暂存区的所有内容提交到当前分支(即Git本地仓库)。
2. 撤销修改
2.1 撤销工作区修改
如果在工作区修改了文件,但还没有执行 git add 命令,可以使用 git checkout -- filename 撤销修改:
git checkout -- filename
2.2 撤销暂存区修改
如果已经执行了 git add 将文件添加到暂存区,现在想要撤销修改:
-
撤销暂存区的修改
git reset HEAD filename -
再撤销工作区的修改
git checkout -- filename
2.3 撤销版本库修改
如果已经提交了不合适的修改到版本库,并且想要回退到历史版本,可以使用 git reset --hard commit_id 命令:
-
查看提交记录,获取要回退的
commit_id:git log -
使用
git reset --hard commit_id回退版本:git reset --hard commit_id
对于 git reset 命令,有三种参数:
- soft:仅仅移动版本库HEAD指针,不会重置暂存区和工作区。
- mixed:移动版本库HEAD指针,并且重置暂存区,但不重置工作区。
- hard:移动版本库HEAD指针,重置暂存区和工作区,彻底回退到某个版本。
注意: git reset --hard 命令会直接修改工作区的内容,请谨慎使用,避免数据丢失。
总结
通过本文,你了解了工作区、暂存区和版本库的概念及其操作:
- 工作区是文件编辑和操作的地方。
- 暂存区是用来暂时保存改动的地方,可以使用
git add将工作区的修改添加到暂存区。 - 版本库是包含项目所有元数据和对象数据库的地方,可以通过
git commit将暂存区的内容提交到版本库。
同时,你学会了如何撤销工作区、暂存区和版本库中的修改,以及 git reset 命令的不同参数及其使用场景。这些知识对于有效地使用Git来管理和追踪项目的改动非常重要。
参考文章:
廖雪峰git教程:工作区和暂存区