Skip to content

我们要使用 git,首先要进行用户配置

shell
$ git config --global user.name "your name"
$ git confit --global user.email "your email"

此时可以通过 $ git config --list 来查看配置,如果存在 user.name 和 user.email 就说明我们配置成功了

git 的功能无非就是版本控制+协作开发,要实现版本控制,无非就是开发出一个版本后打包成一个版本上传一次,然后开发出第二个版本的时候再打包成一个版本上传一次,我们可以在版本之间相互切换,这就完成了版本控制,也就是说我们版本库里可能有很多个版本,在 GIT 中有一个指针的概念,指向谁就可以把谁拿出来。

现在如果我希望发布一个新版本,我发布新版本之前,肯定要改一大堆东西对吧,我不可能没编辑一个字符就发布一个版本,对于这些内容,我们一般是放在一个暂存区里,实际上就是一个临时存储的区域,当我们的项目有改动,但是改动不足以发布一个版本,就可以放到暂存区里放着。实际上,我们想要上传到 GIT 都需要先放到暂存区里,再将暂存区里的内容上传到版本库。

暂存区只会存放已经修改的文件,对于没有修改的文件,它根本没必要更新新版本。

我们想把一个项目上传到 GIT,首先是要在工作区进行开发,每天开发完毕都可以丢到暂存区里去,当然也可以不丢。当一个版本开发完毕后,将这个版本的内容丢到暂存区里去,然后再将暂存区里的内容全部上传到 GIT 的版本库。

实际上,不管是工作区,暂存区,还是版本库,本质上都是同一个文件夹,我们只需要使用 GIT 将一个文件夹初始化为仓库,就可以实现这样的版本控制。

我们使用 $ git init 指令对当前文件夹进行初始化,执行完之后,文件夹下会出现一个 .git 的文件夹,此时就初始化成功了,像我们各个版本的信息,这些其实都存在这个 .git 隐藏文件夹里面。我们在这个文件夹内写的项目就可以实现版本控制的效果,这个文件夹就是我们所谓的工作区。

如果我想把工作区的内容提交成一个版本,就需要将工作区的内容放到暂存区,然后再将暂存区的内容提交到版本库。这里就涉及到两个操作,将工作区的文件放到暂存区,以及把暂存区的文件提交到版本库。

使用 $ git add [file1] [file2]... 、$ git add [dir] 可以将一个或多个文件或指定文件夹添加到暂存区,如果我们要把所有的文件添加到暂存区,那就要使用 $ git add .。当执行完之后,相当于就是将工作区里面的内容复制了一份放到了暂存区。下一步可以使用 $ git commit -m [message] 就可以将暂存区的内容提交到版本库,其中 [message] 实际上可以看做当前版本的一个更新日志。提交之后其就成为了一个版本。

有时候我们会将文件进行修改,此时就使用 $ git status 来查看所有变更文件。如果一个被修改的文件重新提交到暂存区,此时是一个覆盖操作,而非新增操作。

有时候我们只希望 GIT 管理我文件夹内部分的文件,不希望他管理所有的文件,或者说,我希望他忽略文件夹内的一些文件,就可以使用一个 git 的配置文件来实现,我们在根目录创建一个 .gitignore 文件,就可以让 GIT 忽略一些文件,这个文件内有一套配置规则,参考 [1.git文档](./1.git文档.md#忽略文件配置(. gitignore))。当我们配置了忽略之后,GIT 在进行版本控制的时候就会忽略工作区内的指定文件。

当我们进行版本提交的时候,也就是将暂存区提交到版本库的时候,GIT 中的指针始终指向新提交的版本

这个指针称为 HEAD

我们可以使用 $ git log 就可以查看当前分支的版本历史,在 git log 里版本的 commit 的信息实际上就是真实的版本号,只不过是一个 42 位的 16 进制,从概率上来说,42 位 16 进制是可以出现重复的情况,但是这个率只存在于理论上,这玩意儿换成十进制得 50 位,超过了地球上总原子的个数,所以实际上,我们完全可以把这个 commit 看做是版本号,或者说版本的唯一识别码,我们通过这个版本号实现版本切换。

我们使用 git reset --hard [commit] 指令就可以重置当前分支为指定的 commit,同时暂存区、工作区都会同步更新

commit 非常的长,在使用 git reset --hard [commit] 的时候,我们使用 commit 的前七位就已经足够标识了,所以这里的 [commit] 可以只传入前七位

我们现在已经执行了非常多的操作,此时使用 git reflog 可以看到最近的几次提交操作。

值得注意的是,我们切换历史版本之后,版本库里依旧保存着所有的版本信息,里面也包含了每次提交的 commit,我们也可以利用这里的 commit,使用 git reset --hard [commit] 跳转到指定版本。所以实际上该指令做的事是版本切换,而非简单的版本回溯。但是我们想要回溯版本吧,经常都是出现问题了才回溯,但是错误的版本一直都存在版本库中,这里就有一个需求,就是我不想要简单的回溯,而是一个回滚操作,就是真正回到某个版本重头开始,而不是简单的切换到某个版本。如果我们要实现回滚操作,就是用 git revert [commit],就可以进行回滚。

注意,git revert [commit] 是回滚哪个版本,例如 A, B, C 三个版本,如果我发现 B 这个版本出现了问题,我使用 git revert B,此时会回滚 B 版本,也就是执行一次和 B 版本操作相反的操作,但保留 C 版本的更改。

我们可以使用 git diff 来比较暂存区和工作区的差异,当然还可以比较其他的东西,取决于参数,这里参考文档即可。

以笔记为镜,可以知得失