Git版本控制系统
一.为什么需要Git
大家有没有这样一个感触,在做毕业论文或者整理文档时,是不是需要修改来修改去,备份来备份去做很多重复性工作呢?
为了解决上述问题,推荐大家使用版本控制系统进行管理,有了这些系统管理我们就可以:
- 自动生成备份
- 知道改动的地方
- 随时回滚
常见的版本管理工具:
1.SVN:集中式的版本控制系统,只有一个中央数据数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者都无法使用SVN,无法进行提交或者备份文件
2.Git:分布式版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git,当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库
二.Git安装配置
系统环境:centos7 防火墙和selinux都关闭
安装git:yum -y install git
Git全局配置:
git config --global user.name "wh" #配置git使用用户
git config --global user.email "XXXX@qq.com" #配置git使用邮箱
git config --global color.ui true #语法高亮显示
git config --list #查看全局配置
初始化GIT工作目录:
mkdir git_data / cd git_data / git init #初始化 / git status #查看工作区状态
注意git在初始化之后会生成一些存放暂存区域的目录文件(.git):
三.Git常规使用
1.创建数据-提交数据
touch README / git status / git add README / git status / git commit -m "first commit README" #git commit 提交暂存文件至版本库
通过git log / git log --oneline可以查看我们提交日志:
这里我们在通过一张图来对比git_data目录的一大家子之间的关系:
2.GIT COMMIT -A参数
。 添加新文件
git add * 添加到暂存区域
git commit 提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看修改或删除原有文件
常规方法:
git add *
git commit
简便方法:
git commit -a -m “注释信息” -a 表示直接提交
3.删除暂存区数据
没有添加到暂存区的数据直接rm删除即可。
已经添加到暂存区的数据:git rm --cached database #将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
git rm -f database #将文件数据从git暂存区和工作目录一起删除
4.重命名暂存区数据
没有添加到暂存区的数据直接mv 改名即可
已经添加到暂存区数据:git mv data test
5.查看历史记录
1 git log #→查看提交历史记录 2 git log -2 #→查看最近几条记录 3 git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异 4 git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息 5 git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息 6 git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录 7 git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。
6.还原历史数据
Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,
故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,
上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。
git reset --hard HEAD^ #→还原历史提交版本上一次
git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)
7.还原未来数据
什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。
git reflog #→查看未来历史更新点
8.标签的使用
前面回滚使用的是一串字符串,又长又难记。
git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
git tag #→查看当前所有的标签
git show v1.0 #→查看当前1.0版本的详细信息
git tag v1.2 -m "version 1.2 release is test" #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
[root@centos7 git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@centos7 git_data]# git reset --hard V1.0
HEAD is now at a66370a add oldboy dir
9.对比数据
git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放⼼多了。
git diff README
四.分支结构
1.概念描述
在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。
那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。
所以团队的合作分支看起来会像下图那样:
2.创建分支
git branch linux #→创建分支
git checkout linux #→切换分支
git branch #→查看当前分支情况,当前分支前有*号
测试在linux分支修改文件并提交到git仓库,最后切换回master分支,你会发现什么呢?
3.合并分支
想把linux的工作成果合并到master分支上
先切换到master分支
git merge linux #→合并Linux分支至master
查看合并的文件
git branch -d linux #→确认合并完成后,可以放心地删除Linux分支。
4.分支冲突
同时修改master和linux分支的同一个文件并提及,最后merge,查看合并结果如何解决?
需要手动修改冲突文件并在此commit即可。