一 基本概念
工作区(Working Directory):指的是我们的项目所在的目录。
版本库(Repository):指的是工作区 .git 目录。如下图所示,版本库主要有三部分组成。
- index :也就是我们讲的暂存区;
- HEAD :指向分支的指针,默认指向 master;
- refs 目录下创建的分支(版本库初始化的时候创建 master 分支)。
二 命令探究
2.1 git add a.txt 命令发生了什么事情呢?
将在工作区的 a.txt 文件添加到暂存区 index了,此时在暂存区内是有 a.txt 文件的。
2.2 git commit a.txt -m'add a.txt' 命令发生了什么事情呢?
将位于暂存区的 a.txt 文件提交到版本库的一个分支,此时暂存区没有了 a.txt 文件。
三 数据回退
3.1 如何放弃工作区内文件的修改?
比如说我们在工作区对 a.txt 文件进行了修改,但是我们觉得修改不满意,想放弃这个修改,如何操作呢?
可以使用:git checkout a.txt 放弃对文件的修改。
3.2 如何将暂存区文件回退到工作区?
比如说,我们使用 git add 命令将文件添加到暂存区,这个时候发现添加文件错误。如何将放弃暂存区的修改,重新放回工作区?
可以使用: git reset HEAD a.txt 将文件变成修改状态。
3.3 版本库如何将多个提交合并成一个提交?
假设我们对 a.txt 文件进行了三次提交,如图所示:
别人不知道,我们这块针对一个功能最好是一次提交,那这个意味着我们这块需要对多个提交合并成一个提交。这块如何实现呢?
方式一:git rebase -i HEAD~n
这个n代表提交次数,这块取3就行。
将第二个和第三个 pick 修改成 s。
编辑 commit log
方式二:git reset commit_id
这个 commit_id 是第一次提交之前的 commit_id,这个命令相当于将文件的多次提交回退未提交 commit 状态。
这块需要通过 git add a.txt 、git commit -m '修改a.txt文件' 来达到 commit 。