Git 基本操作(一)

目录

[git add](#git add)

[git commit](#git commit)

[git log](#git log)

[git status](#git status)

[git diff](#git diff)

[git 版本回退](#git 版本回退)

[git reset](#git reset)


git add

git add 指令为添加工作区中的文件到暂存区中。

bash 复制代码
git add file_name; //将工作区名称为file_name的文件添加进暂存区
git add  .; //将工作区中的所有文件添加进暂存区

git commit

git commit指令为将暂存区中的文件添加到master分支中。

bash 复制代码
git commmit -m "这里为对这一次文件提交的描述"

需要注意的是,git commit -m 中的**-m** 选项是必须要含有的,表示添加的日志信息是什么。

git log

git log 用于查看提交的日志。

bash 复制代码
git log

通过上图我们不难发现,在commit 后面有一个很长的 16 进制序列数字,这个数字我们称之为一个 commit id ,它是经过哈希算法获得的具有唯一性的 id,可以用于定位每一次的文 件提交。

bash 复制代码
git log --pretty==oneline //将提交日志信息以一行的方式显示出来

git add 以及git commit 之后,工作区中的文件就已经被添加到了版本库中的master分支中。

1.此时查看版本库的目录结构,在目录中生成了HEAD 指针。

HEAD 指针指向了,版本库目录中的 master 分支。

2.在目录中也生成了 index目录,里面存放的就是工作区的文件被添加进暂存区之后生成的索引文件。

3.在目录中生成了 objects 目录,这个目录里面存储的是,工作区的文件被每次修改并 git add 以及git commit 之后,生成的 Git 对象,这个 Git 对象可以用于历史文件版本的恢复,里面存储的是每一次git commit 之后生成的commit id哈希值。

4.在目录中生成了 master 目录,这个目录里面存放的是,最新一次提交的 commit id

通过这个 commit id 找到了上一次提交的 commit id

根据,上一次提交的 commit id 可以找到对应的blob对象,这是在工作区的文件被 git add 之后创建的对象,里面存储文件内容。

根据 blob 对象的哈希值,可以读取文件的内容。

git status

我们对工作区中的 ReadMe 文件进行修改,此时工作区中的 ReadMe 文件和本地仓库中的 ReadMe 文件就是不想通的,我们怎样查看当前的本地仓库的状态呢?

可以使用 git status 指令,查看本地仓库的状态。

通过显示的内容我们可以得知,我们已经对工作区中的 ReadMe 文件进行了修改,但是还没有 进行 addcommit

git add 之后,查看本地仓库状态。

通过上图我们发现,git add 之后提示我们还没有 commit

git commit 之后,查看本地仓库状态。

通过上图发现,git commit 之后,我们已经不需要再去提交任何内容。

git diff

还是上述的场景我们对工作区中的 ReadMe 文件进行了修改,那么我们怎么样得知工作区ReadMe 文件和版本库 中的ReadMe 文件的区别呢?

我们可以使用 git diff 指令查看其区别。

区别就是我们在工作区中的ReadMe 文件中添加了hello yjd!!! 字符串。

git 版本回退

有些时候我们可能会对同一个文件进行多次更改和提交,但是有时候我们发现最新的版本不符合我们的要求,此时我们就要回退到历史的版本,此时我们就需要使用git 版本回退的相关指令。

git reset

git 版本回退时,我们使用git reset指令进行版本的回退。

还是上述场景,我们对 ReadMe 文件进行了修改,修改前我们简称为 git ,修改之后我们简称为git/yjd。git 版本的回退有很多的选项,图示如下。

|---------|---------|---------|-------------------|
| 工作区 | 暂存区 | 版本库 | 选项 |
| git/yjd | git/yjd | git | --soft |
| git/yjd | git | git | --mixed(默认选项) |
| git | git | git | --hard(慎用) |

工作区中存储的就是文件本身,而暂存区中存储的是 git add 之后的在 object 目录下生成的 blob 对象的哈。什么是blob对象?

我们知道,一旦我们一 git add 文件,就会在object 目录下生成一个 git 对象,git 对象用于版本控制,而 blob 对象就是 git对象中的一个对象,可以理解为这个对象中存放的就是文件中的内容。

每次 git add 都会生成一个 git 对象,但是如果此次的修改没有修改内容,就不会生成一个新的blob 对象,而是会复用之前的已经存在的 blob 对象,两个 git 对象通过同一个哈希id 找到了同一个 blob对象。

暂存区中存储的就是 blob 对象的 哈希id ,而版本库中存储的就是object 目录下的 blob对象。

  • --soft选项:会将 版本库中的 blob 对象回退,但是不会将暂存区中的 哈希id 和工作区的文件进行回退。
  • --mixed 选项:会将 版本库中的 blob 对象回退,会将暂存区中的 哈希id 回退,不会将工作区中的文件回退。
  • --hard 选项:会将 版本库,暂存区,工作区都回退,但是建议不要使用 --hard 选项,因为有可能有人正在使用这个工作区中的文件,你使用 --hard 选项进行回退,就会导致当前写入的全部文件删除,所以慎用。

如何去进行回退呢?我们使用 --hard 选项进行演示。

1.先通过 git log 查看历史的提交日志,选取回退的版本。

2.使用 git reset --hard 哈希id的方式进行回退。

3.查看是否回退。

此时确实是已经完成了回退。

如果此次回退我们后悔了,想回退到之前,还可以进行回退吗?

此时查询 git log 日志查询出来的 commit id 已经是第一次 commitid 了,所以通过当前的 git log 是不可以进行撤销此次回退的,我们可以根据之前git log 查询结果进行撤销此次回退。

但是,如果我们在打印完了上次的git log 之后就关闭了终端,此时再次打开终端是就无法查看上一次的 git log 结果了,此时想进行撤销回退, 可以使用 git reflog 查看历史指令进行此次回退的撤销。

即使在历史的日志中,对应的哈希id部分哈希id也可以进行历史版本的回退。

说白了,无论是正常的回退还是撤销回退,其实就是通过 commit 之后的commit id (哈希id ) 将此时的 工作区 暂存区 版本库 中的相关信息设置为对应的 哈希id 所处的版本。

所以git 版本控制,其实就是**commit id(哈希id)**的控制。

以上便是本期的所有内容。

本期内容到此结束^_^

相关推荐
SundayBear4 小时前
极简GIT使用
git
一路向北he11 小时前
关于杰理ac791切换版本, git clone下来仍然是最新版本问题
git·单片机
只做开心事21 小时前
Git 工具的安装
git
How_doyou_do1 天前
Git从入门到精通-第一章-基础概念
git
只可远观1 天前
Git 忽略文件配置 .gitignore
android·前端·git
ezreal_pan1 天前
误在非开发分支上开发解决方案
git·cherry-pick
RQ_ghylls1 天前
3. 使用idea将一个git分支的部分提交记录合并到另一个git分支
开发语言·git·idea
2501_915374351 天前
git 怎样把本地仓库推送到新建的远程仓库
git
How_doyou_do1 天前
Git从入门到精通-第二章-工具配置
git