导航小助手
一、Git初识
1.1 场景
1.2 版本控制器
1.3 注意事项
二、Git安装
2.1 Linux-centos
2.2 Linux-ubuntu
三、Git基本操作
3.1 创建Git本地仓库
3.2 配置Git本地仓库
3.3 认识工作区、暂存区、版本库
3.3.1 添加文件—场景一
3.3.2 添加文件—场景二
3.4 修改文件
3.5 版本回退
3.6 撤销修改
场景一:对于工作区的代码,还没有add
场景二:已经add,但没有commit
场景三:已经add,并且也commit了
3.7 删除文件
现在老板需要小李产出一份 设计文档,于是 小李 就屁颠屁颠的去做文档了~
当小李做完了之后,老板不是很满意,于是就只能去 进行第2次修改;之后修改之后,老板说还不如第一次文档,继续再次修改吧;......;最终修改了 n次,就把设计文档发给了老板;老板却又说,看了这么多的文档,还是觉得第一次设计出来的是最符合预期的;此时,......
实际上,小李从开头到现在,只是对着一份文档进行修改的;所以说,此时文档保留的内容 只是第 n 次修改后的内容,并不可以直接拿出第1次的设计文档~
有了这一次的教训,下一次小李在做设计文档的时候,就开始对做好的文档 进行复制粘贴,做一个副本了:
当然,在n比较小的时候,这种办法还是比较好的~
但是,当n比较大的时候,想要拿到其中的某一份文档 是可以拿的出来的,但是 想要知道在这么多文档中需要拿出一份 新增了A功能的文档,估计这就不可以了~
即:随着版本的不断增多,维护好版本还是有挑战的:如 各自版本所修改的内容就不一定记得了~
为了解决这个问题,大佬们就提出了 版本控制器!!!
通俗的解释:需要记录每次的修改内容,以及版本迭代的 一个管理系统~
版本控制器 有很多种,其中 Git 就是其中的最主流的一个,可以控制电脑上的所有格式的文件:.doc、.docx、png、......
对于 开发人员 来说,使用Git可以帮助管理项目中的源代码文件~
版本控制器 只能追踪到 文本文件 的改动,如:txt文件、程序代码 等等;它可以告诉每一次的变化,如 第2行增加了 "git"单词~
但是,对于 二进制文件,如:图片,视频等等;只能知道 从 100kb 变成了 200kb,但是其中具体改了啥,并不能很清楚的知道~
在 Linux环境下 安装 Git 其实非常简单,只需要一行命令即可解决~
首先,我们先来查看一下 Linux服务器 下面有没有安装 Git,可以使用下面的命令 查看安装过的Git版本:
git --version
可以看到,其实我是已经安装好了的~
当然,现在可以删除安装过的Git:
sudo yum remove git -y
此时,就可以安装 Git 了:
sudo yum install git -y
也可以现在继续下载Git:
Git 是一个 版本控制器,如果想要对每一次修改的记录、版本迭代的一些详细内容,就可以使用 Git 去追踪管理它们~
而如果想要追踪管理,这些文件就不可以随便乱放,只有在 Git本地仓库下面 的文件才可以被 Git 所追踪管理的~
我们可以重新建立一个 gitcode目录,打算在这里面做一些Git的基本操作;当我们进入这个目录之后,就可以使用下面的命令来创建一个本地仓库:
git init
可以看见,它自动创建了一个 .git隐藏文件(我们不应该去修改 .git隐藏文件里面的任何内容!)
在创建 Git本地仓库 成功之后,我们还需要为本地仓库 新增两个配置项:name、email
(是必须要配置的)~
配置命令为:
git config [--global] user.name "用户的名称"
git config [--global] user.email "邮箱的格式"
查看所配置的命令为:
git config -l
删除配置的命令为:
git config --unset user.name
git config --unset user.email
注意:
其中,--global
是一个可选项,它的作用是:在一台服务器上,可以创建不止一个本地仓库;如果加了这个可选项,就表示 在当前服务器下的 所有的Git本地仓库 都生效~
当然,如果加了 --global
可选项,那么删除该配置项的时候,不可以直接使用上面的命令;必须加上--global
可选项:
git config --global --unset user.name
git config --global --unset user.email
Git是一个 版本控制器,使用Git就可以对电脑上所有格式的文件进行管理,需要将所要管理的文件放到Git仓库中进行维护~
当然,在目前情况下,Git 还是不能管理 ReadMe
文件~
工作区:电脑上、服务器上 所要写的代码、文件的目录
暂存区:英文叫做stage或者index,又称之为"索引",一般存在于 .git目录 里面的 index文件里面
版本库:又称之为"仓库",即 "工作区"中的隐藏文件".git"
ReadMe
文件 还不能够被Git管理,是否把该文件放进 .git文件 里面,就可以进行管理了呢?答案肯定是不可以的,该隐藏文件是不可以进行手动修改的!!!
所以,就把ReadMe
文件放在了 gitcode
目录下,即:"工作区"里面~
第一步,使用 git add
命令 将所要提交的文件先添加到暂存区:
git add 文件名1 [文件名2][文件名3]......
git add 目录名
git add .
第二步,使用 git commit
命令 将暂存区的内容添加到本地仓库:
git commit -m "message"
注意:message 是 本次所要提交的细节,给自己看的不能省略
git commit 文件名1 [文件名2][文件名3]... -m "message"
注意:message 是 本次所要提交的细节,给自己看的不能省略
此时,我们可以使用下面的命令,来查看时间从近到远的提交记录:
git log
当然,我们可以加一个选项参数,使日志看起来更加的可观:
git log --pretty=oneline
首先创建一个 file4
文件,接着add
file4
一下;接着 继续创建一个 file5
文件,此时 想要提交一次(希望想要把 file4
和 file5
文件 都提交到本地仓库),结果会发现只有一个文件提交上去了~
实际上,add
只是把 file4
文件 放到了暂存区中,所以 提交的时候只会提交 file4
一个文件,而并不会把两个文件一起提交~
对于工作区的一些操作,如:新增、删除、修改文件等等,都算是修改的操作~
结论:Git 追踪管理的是修改,而不是一整个文件~
之后,就可以使用下面的命令 来查看当前仓库的状态:
git status
当然,我们可以使用下面的命令来 查看暂存区和工作区之间的差异:
git diff [文件名]
之后,就可以使用 git add
操作、 git commit
操作 即可~
版本回退 功能 是 Git 最重要的能力之一,作为版本控制器,Git可以管理文件的历史版本~
执行命令:
git reset [--soft | --mixed | --hard] [HEAD]
git reset
本质上是回退 版本库 中的内容,工作区或暂存区是否会退 则需要根据后面的可选项决定~
默认的选项是:--mixed 选项,使用时可以不添加该参数~
当然,还可以回退到当前版本(将工作区、暂存区里面的内容 回退到 和版本库保持一致的内容(即:版本库内容=工作区、暂存区内容)这个在下面介绍)~
注意:
慎用的是 --head
选项,一不小心回退了之后,那么就找不到刚刚写的了
比如说,对于 ReadMe
文件,是有两个版本的:版本1 是只有 hello git
内容,版本2 是在 版本1 的基础上增加了 hello world
内容
工作区 | 暂存区 | 版本库 | |
---|---|---|---|
版本2 回退 | git world | git world | git world |
--soft | git world | git world | git |
--mixed:默认选项 | git world | git | git |
--hard:慎用 | git | git | git |
以使用 --hard
选项为例:
此时,如果再次打印日志信息,就会发现 后面的提交的日志都不见了,只有一份日志信息:
如果说,现在又突然后悔了,又突然想要回到原先版本2的内容,有没有可以回去的办法?
当然,因为一开始我们知道了 版本2 的 commit id
(一开始打印出来的日志里面有):
如果说,服务器突然关闭了,或者是突然清屏之类的,使得找不到对应的 commit id
,怎么办?
我们可以使用下面的命令来查看 每一次的提交命令:
git reflog
版本回退速度迅速的示意图:
如果在工作区中已经写了很长时间的代码,但是 越写越觉得写的代码很垃圾,想恢复到上一个提交的代码,就需要进行撤销修改操作~
这种情况,想要撤销的代码 存在于 工作区~
首先,我们先对 ReadMe
文件 增加一行内容:
当然,我们可以在这种情况下 直接手动编辑 ReadMe
文件,以删除新增的内容;但是 也会有这样一种可能性,这代码已经开发三四天了,已经写了很多很多行代码了,此时 手动删除就不是很方便了,也不能保证删除的内容是不是之前写的,可能改着改着就会出现 Bug 了(不推荐,容易出错)......
所以,Git 就提供了这样一个命令,直接完成对工作区的回退,回退到上一个版本:
git checkout -- 文件名
这种情况,想要撤销的代码 存在于 工作区、暂存区~
同样的,继续对 ReadMe
文件 进行一次修改,以用来演示:
对于这种情况,我们可以使用下面的命令:
git reset [--mixed | --hard] [HEAD]
注意:该命令将工作区、暂存区里面的内容 回退到 和版本库保持一致的内容(即:版本库内容=工作区、暂存区内容)
使用 --hard
选项 时,工作区、暂存区、版本库 同时回退,此时 工作区、暂存区里面的代码就撤销了,符合预期~
使用 --mixed
选项 时,暂存区、版本库 同时回退,此时只剩下工作区的代码需要回退了,就变成了和场景一的情况了~
这种情况,想要撤销的代码 存在于 工作区、暂存区、版本库~
咳咳,前提条件:commit
之后没有 push
,没有推送到远程仓库,撤销的目的是不会影响远程仓库的代码~
我们同样可以使用 git reset
命令,来对代码进行回退:
git reset --hard HEAD^
同样,准备工作需要做好:
总结:
删除文件,不仅仅是需要将 工作区 中的内容删除,而且还同时要把 暂存区、版本库 里面的内容删除~
所以,我们不可以 仅仅使用 rm
命令 删除(仅仅删除 工作区 内容)~
我们可以使用两种方式 来删除文件:
第一种方式(咳咳,这种方式没试出来):
rm
命令 文件名
git add
文件名(将工作区中的变动 提交到暂存区)
git commit -m "message"
进行提交命令
第二种方式(自己比较推荐这种方式):
git rm
文件名
git commit -m "message"
咳咳,原来有的 file3
、file4
、file5
文件 试没了,不必在意这些细节......