Git简介
git是一种源码管理系统(source code management,缩写为SCM)。它对当前文件提供版本管理功能,核心思想是对当前文件建立一个对象数据库(object database),将历史版本信息存放在这个数据库中,git是目前最好用的版本控制系统(没有之一)。
用命令的方式解释下各个区是如何工作的:
仓库建好了,当前目录下会多一个.git的目录,这个目录就是用来跟踪管理版本库的,我们也可以在其他路径使用git init <目录名称>来指定目录作为git仓库。
第三步:在工作区新建文件并把文件添加到仓库;
$ touch readme.txt
$ vi readme.txt
$ cat readme.txt
hello git
切记,新建文件一定要放到gittest目录(子目录)中,因为这是一个git仓库,放到其他地方git再厉害也找不到这个文件。
第四步:用命令git add告诉Git,把文件添加到仓库;
git add readme.txt
第五步:用命令git commit告诉Git,把文件提交到本地仓库;
$ git commit -m “测试git”
-m:后面输入的是本次提交的说明,建议我们在开发过程中要养成习惯,输入的内容要有意义,这样能够从历史记录中轻易找到方便我们回退版本;
1 file changed:1个文件被改动(我们新添加的readme.txt文件);
1 insertions:插入了1行内容(readme.txt有1行内容hello git);
除了以上信息之外,我们发现GIT需要我们设置名称和邮箱地址,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
Git的配置文件为.git目录下的config文件,常用命令如下:
git config --list # 显示当前的Git配置
git config [--global] user.name "[name]" # 设置提交时的用户信息
git config [--global] user.email "[email address]" # 设置提交时的邮箱地址
通过以上命令我们可以看到从最近到最远提交的日志记录,一共提交了3次,最近的一次是“测试git3 修改hello git 2023”,上一次是“测试git2 修改hello git 2022”,第一次是“测试git”,可以试试加上--pretty=oneline参数打印一次:
这样是不是看得更清楚?
第一段代表commit id为版本号,和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
第二段就很好理解了,代表我们提交说明,每次修改的内容是什么一目了然。
假如我们现在有个需求,需要把reademe.txt回退到上一个版本,也就是测试git2 输出hello git2的哪个版本,怎么做?
在git中,用HEAD表示当前版本,上一个版本是HEAD^,上上一个版本HEAD^^,往上100个版本是HEAD~100,现在回退到上一版本可以使用如下命令:
$ git reset --hard HEAD^
可以看到readme.txt的内容已经回退到上一版本并输出hello git 2022.
假如我们现在需求变了!!需要回退到2023的版本怎么办呢?我们打印log发现2023的日志没了,这时候怎么办呢?
我们使用git reflog命令来打印所有版本的commit id
然后查询到git 2023的版本号为8b2cd52,再执行以下命令可以看到回退到2023的版本了。
$ git reset --hard 8b2cd52
Git版本回退,常用命令如下:
git log --pretty=oneline # 显示历史版本
git reset --hard HEAD^ # 回退到上一版本
git reflog # HEAD所指向的一个顺序的提交列表
git reset --hard
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
现还有一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout --
Git删除,常用命令如下:
git rm
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
Git分支管理,常用命令如下:
git checkout -b dev # git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev # 创建dev分支
git checkout dev # 切换到dev分支
git branch # git branch命令会列出所有分支,当前分支前面会标一个*号。
git merge dev # 把dev分支合并到当前所在的分支
git branch -d dev # 删除dev分支
git switch -c dev # 创建切换分支同git checkout -b dev一样
git switch dev # 切换到dev分支同git checkout dev
评论