初始git
我们给出下面的一个场景,在大学里,一些老师在我们做完实验之后喜欢让我们交实验报告,假设我们有一个比较追求完美的老师和一个勤奋的学生,这个学生叫做小帅,那天小帅桑勤奋的完成实验报告,在第二天的时候就去老师办公室教实验报告,但是这个老师一看小帅的实验报告,马上说这个实验报告不行,让你区改一下,这个时候就有我们第一版本的实验报告,然后你去改了好几次,也有好多版本的时候,假设小帅已经写了五个版本的时候,老师说”小帅啊,我看你是个勤奋的学生,是这样的,我看你这个报告还是第二次的最好,你把你第二次改的实验报告拿来就可以了”,因为小帅的实验报告是在每次的基础上改的,所以没有保留之前的版本,这个小帅的心中有一万头草泥马在奔跑,就这样勤奋的小帅被刁钻的老师打败了,这个时候git的作用就可以体现出来了,他就是一个版本控制器,我们可以理解有了它,小帅就能轻松的找出第二个版本的实验报告,因为每一次的实验报告git都会记录下来,但是git可不是仅仅记录实验报告用着,对程序员来说,就是一个可以管理我们源代码的一个重要工具。
注意事项
git的本质就是一个版本控制器
git的安装
我们可以先来查询一下我们的云服务器上是否存在git,输入指令
sudo yum -y install git
我们也可以在我们后面输入指令
git --version
来查看我们的版本(后面我演示都是在我自己的本地云服务器上)
[tjl@hecs-67680 ~]$ git --version
git version 1.8.3.1
[tjl@hecs-67680 ~]$
这样我们就可以查询我们的版本了。
Linux-ubuntu
如果你的平台是ubuntu我们可以执行下面的指令来安装git
sudo apt-get install git -y
查询git的版本还是下面的这个条指令
git --version
这样我们的第一步完成了。
创建本地仓库
首先我们需要在本地创建一个目录,因为我们现在知道git是一个版本控制器,所以就应该在一个目录下进行对我们文件进行管理。
创建出目录指令
mkdir gitcode
然后我们进入目录,别忘记进入目录是cd指令
cd gitcode
然后我们在当前目录下输入指令
git init
就可以对我们的仓库进行初始化了。
我们执行指令就可以看到我们下面的结果
[tjl@hecs-67680 gitcode]$ ll -a
total 12
drwxrwxr-x 3 tjl tjl 4096 Feb 5 11:46 .
drwx------ 20 tjl tjl 4096 Feb 4 21:17 ..
drwxrwxr-x 8 tjl tjl 4096 Feb 4 22:34 .git
因为我这里直接创建过东西,所以有一些东西不一样,我把它删了,看到的就是这个东西
先来了解这里.git是一个什么东西,它就是版本库,我们来看看下面的这个图
执行指令tree .git
可以看到这个就是.git版本库里面的东西,我们后面会一个一个讲解,比如这里的Head指针
对象库(objects)还有暂存区(index)这些,现在我们需要做的就是完成一些配置
我们直接执行下面的指令进行配置
git config --global user.name "内容(比如我写的就是姓名缩写)"
gti config --global user.email "最好输入就是你的邮箱,便于管理"
我们这里如果没有加上--global就不是全局的,最好写成就是加上的,这样所有的地方都有你的记录,在企业中我们的姓名和邮箱这个是很重要的,因为这样就可以看到每次提交人的信息,以便有问题的时候可以找到你。
当然如果我们一开始设置错误的时候,我们也可以进行重置,指令就是
git config --unset user.name
git config --unset user.email
注意:我们的指令进行的时候可一定要在我们的仓库下执行,否则没有我用
认识⼯作区、暂存区、版本库
图来
啥是我们的工作区,啥是我们的版本库呢???
首先在我们的仓库下,也就是我们的目录下,除了.git的区域就是我们的工作区,而我们的.git就是版本库了,那他们有是联系吗。
首先就是我们这里就需要来了解一下两条指令
git add [文件名]//将我们工作区的内容提交到暂存区 git commit -m "标签"//将我们的内容提交到版本库中,会有一个HEAD的指针来进行指示
只有在commit之后我们的内容才会真正的进入版本库中了
这里需要扩展的一点因为我们的 暂存区其实是一个轻量级的库,所以其实我们一些修改的内容在add的时候是放在对象库中,这里修改的内容是指哪些呢,首先就是新增文件,在文件里添加内容,删除文件,这些操作都会存在对象库中。然后我们的暂存区就会从里面拿出内容add进去。
我们现在我们目录下,也就是工作区创建出一个文件叫做ReadMe,并用vim在里面添加一些文本内容。
[tjl@hecs-67680 gitcode]$ vim ReadMe
[tjl@hecs-67680 gitcode]$ ll
total 4
-rw-rw-r-- 1 tjl tjl 10 Feb 5 12:12 ReadMe
[tjl@hecs-67680 gitcode]$ cat ReadMe
Hello Git
然后进行git add进行添加到我们的暂存区当中。
git add ReadMe
那要彻底的放到我们的版本库中的话需要执行的指令就是git commit -m "first add"
执行指令可以看到以下的场景。
[tjl@hecs-67680 gitcode]$ git commit -m "the first add"
[master a6900ba] the first add1 file changed, 1 insertion(+), 2 deletions(-)
我们也可以继续用git log来查询我们的提交记录
因为之前提交过内容,所以大家看的这里比较多,但是其实如果大家一开始什么都没提交的话,请情况只有这里的第一条内容,我们这里可以看到每次提交的时间,还有姓名和邮箱,这样就话在企业里也可以对你进行很好的管理。
我们也可以只打印这里的commit ID
[tjl@hecs-67680 gitcode]$ git log --pretty=oneline
a6900ba4258d83df1a8e67c1f4f2ffed32946633 the first add
3e54e85c13b3492b5a27fed80d8e3baa19c247ec the second commit
f9cca32c3296b756ff8fe68371280e1f2bab5828 the first commit
需要说明的是,我们看到的⼀⼤串类似 23807c5...56eed6 的是每次提交的 commit id (版本号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数 字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)
因为为了更好的演示后面的一些操作我们这里还需要添加一些文件,大家可以看看我下面的操作,就不讲解没一个操作是怎样的,因为很简单。
[tjl@hecs-67680 gitcode]$ touch test1 test2
[tjl@hecs-67680 gitcode]$ git add test1 test2
[tjl@hecs-67680 gitcode]$ touch test3
[tjl@hecs-67680 gitcode]$ git add test3
[tjl@hecs-67680 gitcode]$ git commit -m "commit test"
[master a9ff80a] commit test3 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 test1create mode 100644 test2create mode 100644 test3
[tjl@hecs-67680 gitcode]$
再来打开我们.git
现在我们就可以清楚的看到一些变化,首先就是我们的暂存区(index)
我们也可以来看看HEAD下的东西
[tjl@hecs-67680 gitcode]$ cat .git/HEAD
ref: refs/heads/master
[tjl@hecs-67680 gitcode]$
然后我们再来进入一个目录
[tjl@hecs-67680 gitcode]$ cat .git/refs/heads/master
a9ff80ab653911ff6127ef4450b04accf52eca4b
下面的这个ID其实就是我们最近一次commit的ID,这个ID就可以来来查看对象中的内容
[tjl@hecs-67680 gitcode]$ git cat-file -p a9ff80ab653911ff6127ef4450b04accf52eca4b
tree d2c1bc8d75fc468be739934ae0d1217eec64ce3b
parent a6900ba4258d83df1a8e67c1f4f2ffed32946633
author tjl <2357850265@qq.com> 1707107089 +0800
committer tjl <2357850265@qq.com> 1707107089 +0800commit test
这个就是我们的最近一次对这些文件的修改都被记录下来了
总结⼀下,在本地的 git 仓库中,有⼏个⽂件或者⽬录很特殊
这里继续添加两个指令
git status //来查看上次提交之后在工作区中的内容是否被修改
git diff [文件] //来显示工作区和暂存区的不同
啥意思呢???
就是我们在工作区是可以继续一些操作,比如我们是不是可以创建出文件,也可以在文件中新增内容,但是我们没有进行add操作,这些内容就还是在工作区,我们并没有将修改的对象加载到暂存区,所以就可以用git status 来查看,然后git diff可以更清楚的对比我们到底哪里进行修改,有人就会问,我刚修改的对象我怎么可能忘记呢!假如场景是下面的这个,有一天你写了代码提交了,然后你又改了,改好之后你妈叫你去吃饭了,然后你忘记提交了,三天之后你还记得你改在哪里了吗,所以git diff就可以来帮助我们解决这个问题
版本回退
有时候我们可能想找到上一版本的时候我们也可以通过版本回退的操作进行查找,指令就是以下的内容
git reset [--soft | --mixed | --hard] commitID
看这个图就可以来理解我们使用不同指令进行回退的时候应该加上那个指令
一般不建议加上 --haed,因为这个是把工作区,暂存区,版本库的内容都回退,虽然可以用指令查询到,但是如果commit ID变了的话就不能查询到了,反正建议就是最好不要用,。
查询以往commitID可以用的指令
git reflog
今天的内容就到这里,后面会继续更新git的内容!