Git简介与使用
1 什么是Git
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
1.1 什么是分布式版本控制,什么是集中式版本控制?
1.1.1 集中式版本控制
条件:现在有一部客户机与服务器
集中式版本控制就是客户机对某个文件的更改信息都需要上传服务器,只有服务器端才能查看你更改的信息记录,客户机无权查看。一旦服务器出现问题,你想找回原来改之前的文件几乎不可能。
举个例子
当你用word写论文时,你提交给老师,老师会根据你的论文提出修改意见,这样的话,你就需要多次对这个论文进行更改。并且你还需要将修改的论文另存为另外一个文件,因为改之前的论文版本内容还有用处,不能直接改完就直接保存。
如此,你的电脑上就会出现多个版本的论文,论文一多,你可能不小心弄乱甚至删除某一版的论文,无法找回。
你更改的每一版论文其实都有记录,但这些记录你无权查看,这些记录会保存到远程服务器上,只有服务器端才可以查看。
这样对于我们很不方便,一旦你没做记录或者忘记对哪一版论文进行更改,你就可能需要花费大量时间去找自己到底改了哪一版的论文。
1.1.2 分布式版本控制
如果你读懂了什么是集中式版本控制,分布式版本控制就很好理解。和集中式版本控制一样,我们同样列举条件和举例子。
条件:现有一部客户机和服务机
分布式版本控制每个客户机还可用作服务机,你对某个文件的更改信息会记录在本地中,客户机可以选择将这些信息上传服务机也可不上传,不管客户机是否将这些信息上传服务机,客户机都可以在本地查看这些更改信息,什么时间、什么人对这个文件进行哪些更改。
举个例子
客户机对某个目录下面进行4次更改
(1)创建3个TXT文件:1.txt , 2.txt , 3.txt
(2)编辑1.txt,向1.txt添加"hello 1.txt"内容
(3)编辑2.txt,向1.txt添加"welcome to beijing"内容
(4)删除3.txt
客户机对这个文件进行了4次更改,有四个版本,通过命令,分布式控制版本可以查看这4次更改,并且对这4个版本都有存储,可以通过命令恢复任一版本。
1.1.3 分析
集中式版本控制和分布式版本控制都有其优缺点
1 集中式版本控制优点:
(1)管理员可以轻松掌控每个开发者的权限。
(2)管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
2 集中式版本控制缺点:
(1)中央服务器发生单点故障,如果服务器宕机一个小时,那么在这一个小时内没谁都无法提交更新,也就无法协同工作。
3 分布式版本控制优点
(1)独立自主:每个团队成员都有一个完整的代码仓库,可以独立自主地操作,不需要依赖中央仓库。
(2)速度提升:团队成员可以互相复制代码,不需要与中央仓库交互,速度更快。
(3)权限管理:分布式版本控制没有严格的权限管理,只需要保证团队成员的代码一致即可。
(4)历史记录完整:分布式版本控制完整记录了代码的历史记录,方便追溯和回滚代码。
4 分布式版本控制优缺点
(1)学习曲线陡峭:相对于中央式版本控制,分布式版本控制的学习曲线陡峭,需要花费更多时间学习和掌握。
(2)管理难度大:分布式版本控制需要管理多个代码仓库,管理难度较大。
(3)分支冲突:在分布式版本控制中,分支冲突是常见的问题,需要谨慎处理。
2Git实战
2.1 Git安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。下面讲的是在window环境下安装
1 在官网下载Git,直接安装即可。
2 安装完成之后鼠标右键,多出来两个选项,见下图。
3 安装完成首次进入Git需要设置用户名和邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --global --get user.name #得到user.name的值
$ git config --global -l #列表参数
2.2 创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
cd /e/ #window的git bash中进入e盘
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
现在Git就把仓库建好了,而且这是一个空的仓库(empty Git repository),可以发现
当前目录下多了一个 .git 的目录(隐藏目录,用 ls -ah 命令就可以看见),这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
2.3 添加文件到版本库
1 现在我们编写一个 readme.txt 文件,这个文件一定要放到 learngit 目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找
不到这个文件。向readme.txt添加如下内容:
Git is a version control system.
Git is free software.
2 用命令 git add 告诉Git,把文件添加到仓库:
$ git add readme.txt
3 用命令 git commit 告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
4 查看信息
$ git log
commit 6e4de12122b22ee3145dfa87af974d284f832dd2 (HEAD -> master)
Author: aaa <77@163.com>
Date: Tue Jul 11 09:57:08 2023 +0800
wrote a readme file
从上面的信息可以知道,邮箱为77@163.com的,用户名为aa的用户,在2023年7月11日上午9点57分提交了一个ID为6e4de12122b22ee3145dfa87af974d284f832dd2的一个版本信息。
5 使用git status查看git状态
$ git status
On branch master
nothing to commit, working tree clean
2.4 简述Git内部的工作过程
1 要想了解Git的工作过程,首先得知道Git内部是什么样子的,我简单的画一个图,见下图。
1 Git内部有工作区和版本控制,其中,版本控制中还有暂存区和master分支。
2 当新建文件时,文件存放在工作区,要想将文件更改信息保存起来,要将文件添加到暂存区中,最后将文件提交到master分支中。
3 这样,你对文件的修改信息无论什么时候都可以查看,不仅能查看是谁进行了修改,还能查看在什么时间、修改了什么内容。
2.5通过实例加深对Git工作过程的理解
下面我们结合图片和实例来说明Git的工作过程
1 我们在windows环境下使用Git,首先新建一个文件夹,例如learngit(这个文件夹目录不要出现中文),在learngit目录下鼠标右键,选择Git Bash Here,进入Git命令模式。
2 用命令git init进行初始化,并用命令ls -ah查看是否生成.git文件。
$ git init
Initialized empty Git repository in D:/learngit/.git/
Administrator@MS-WGOWZJRZLIYZ MINGW64 /d/learngit (master)
$ ls -ah
./ ../ .git/
3 用命令新建一个文件(例如test.txt),并用命令vim向文件中编辑 hello test内容。
Administrator@MS-WGOWZJRZLIYZ MINGW64 /d/learngit (master)
$ touch text.txt
Administrator@MS-WGOWZJRZLIYZ MINGW64 /d/learngit (master)
$ vim test.txt
Administrator@MS-WGOWZJRZLIYZ MINGW64 /d/learngit (master)
$ cat test.txt
hello test
新建完文件,工作区就多了一个text.txt文件,见下图。
4 使用git status 查看git状态
从图片中可以了解到,在master分支主机上有一个尚未提交,尚未跟踪的test.txt文件,且这个test.txt文件是红色字体的。
5 下面,我们将test.txt文件添加到暂存区中,并查看git状态。
git add text.txt
git status
从前图片中可以看出,text.txt文件变为绿色了,说明文件已经从工作区添加到暂存区。如下图。
6 下面将暂存区的文件提交到master分支,并查看git状态。
git commit -m "new-built text.txt" # " "里面的内容是自己加的注释,做了什么行为
git status
查看git状态可知,git工作区是干净的,里面已经没有要执行的文件,这时候test文件已经提交到master分支了,见下图。
7 做到这里似乎有的同学还有些懵,做这些到底会怎么样?
回到最初的集中式版本控制与分布式版本控制的问题,我们不就是想查看是谁,在什么时间,修改了哪些内容。
我们用一条命令 git log 即可查看,见下图。
从图片红框里面可以看出来,邮箱为<qq.com>(为了隐私,我做了一些涂抹)名叫Dai的人,在2023年7月12日 20点09分51秒,做了new-built text.txt(新建text.txt文件)这件事情。并且,你注意看commit 后面有一堆字符和数字混合的一串代码,这个是修改信息的ID,用这个ID可以查看这个信息,随时可以恢复这个master版本的状态。
到这一步,我真的要哭了,原来我们做的每一步都不是白做的,我们做的每一步都有意义。人生也是一样,只要你做积极向上正能量的事,每做的任何一件事都有意义。
3 版本控制
3.1 修改text.txt
修改test文件,改成一下内容
hello test
you are a girl.
you are a boy.
用vim test.txt命令修改内容并查看
vim test.tx
用命令查看git的状态
git status
此时,test.txt被修改过了,但是还没有提交修改。
现在,我不小心清屏了,然后我也忘记我对text.txt具体做了什么修改,怎么办?
可以用diff命令查看自己具体做了哪些修改。
git diff text.txt
可以看到我对text.txt做的修改是:加了两句话。
知道了对text.txt做了什么修改,在提交我们就放心了,先将文件添加到暂存区,在将暂存区里面的提交到master分支中。
git add text.txt
git commit -m "update text.txt"
最后用命令查看git状态
git status
可以看到当前没有需要提交的修改,并且工作区是干净的。
3.2 版本回退
1 现在我们已经学会了如何进行修改文件提交,我们准备4个版本,我们已经有了2个版本的text.txt,我们在修改text.txt内容,交2个版本。
版本1:new-built text.txt
版本2:update text.txt
版本3:修改text.txt为以下内容并提交。
you are a beautiful girl.
you are a brave boy.
版本4:修改text.txt为以下内容并提交。
you are a beautiful and clever girl.
you are a brave and clever boy.
用命令查看现在git仓库里面有几个版本。
git log --oneline
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用 HEAD`时,表示最新的
版本。
–soft :仅仅移动本地库 HEAD 指针
–mixed: 移动本地库 HEAD 指针,重置暂存区
–hard:移动HEAD指针,重置暂存区,工作区,省略git checkout – file
现在我想回退到上一个版本,需要用到reset命令
git reset --hard HEAD^
或者你找到你想回退那个版本的ID,用命令也可退回
git reset --hard ID
执行完再用 git log --oneline查看现在master所在的版本,可知现在确实回退到了上一个版本。
## 3.3 撤销修改
今天先到这里,后面的内容我会找时间进行更新。