Git —— 版本控制工具

1、Git 介绍

        Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

        Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。

如图所示,是经典的git开发过程:

其版本特性及优缺点参考:https://baike.baidu.com/item/GIT/12647237?fr=aladdin

2、相关基础操作

git init —— 初始化本地仓库

git config --global user.name “zhoulz”  —— 设置用户名

git config --global user.email “xxxx@126.com”    —— 设置邮箱

1)add、commit

git是3段式,中间有个暂存阶段,所以提交只是提交到本地代码库中,要提交到远程代码库,还需要推送一下。

git add Demo.txt  —— 提交至缓存区(Demo.txt可加可不加双引号,下同)

git commit -m "这是我提交的第一个文件 Demo.txt" Demo.txt —— 提交至本地库

在git仓库中新创建了一个文件Demo2.txt后:

2)git status

将Demo2.txt提交至本地库。

对Demo2.txt进行修改后:

git  status

 重新add 和 commit。

3)git log

        —— 可以让我们查看提交的,显示从近到远的日志

 commit 后面的一串16进制数字可以理解为当前历史记录对应的索引

当历史记录过多的时候,查看日志的会出现分屏的效果,一页展示不下:

下一页:空格

上一页:b

到尾页了,显示END

退出:q

日志展示方式:

(1)方式1:git log  ---> 分页 (见上)

(2)方式2:git log --pretty=oneline

(3)方式3:git log --oneline

 (4)方式4:git reflog

多了信息:HEAD@{数字}

数字的含义:指针回到当前这个历史版本需要走(回退)多少步。

4)reset

              —— 前进或者后退历史版本

(当对一个文件进行多次修改,并且add、commit后)

通过指令git reflog —— 获取HEAD@{数字} 信息、以及索引信息(见上图)

git reset --hard bb5970b  —— 前进、后退都可以

(注:选中就是复制,右键-粘贴)

【1】hard参数:

git reset --hard [索引]  ——  本地库的指针移动的同时,重置缓存区,重置工作区。

【2】mixed参数:

git reset --mixed [索引]  ——  本地库的指针移动的同时,重置缓存区,但是工作区不动。

 【3】soft参数

git reset --soft [索引]  ——  本地库的指针移动的同时,缓存区、工作区都不动。

总结:

以后用的多的就是第一种:hard参数(重置缓存区,重置工作区)

5)删除操作1—— 找回本地库删除的文件

删除工作区中的Test2.txt文件

(结合reset操作(恢复))

rm Test2.txt

然后,紧接着:

将删除操作同步到暂存区:git add Test2.txt

将删除操作同步到本地库:git commit -m "删除Test2.txt文件" Test2.txt

 git reflog —— 查看日志

 此时,如果不想删除了:(执行回滚操作)

即:找回本地库中删除的文件,实际上就是将历史版本切换到刚才添加文件的那个版本即可:

git  reset --hard  075dasf  ——  一开始添加Test2.txt时的那个索引

 

6)删除操作2——找回暂存区删除的文件

删除工作区的数据: rm Test2.txt 

同步到缓存区/暂存区: git add Test2.txt

如果此时就后悔了,想恢复暂存区中的数据:

(注1:此时暂存区中的数据已经被删除了,但是本地库找中的数据还没有被删除)

(注2:本地库中的数据还在,则进行充值卡即可,工作区和暂存区都会重置)

git reset --hard 075da3f (还是那个索引)——  其实是重新回滚一次

 即:和找回本地库删除的文件操作一样

因此上面这一步还可以这么执行:(HEAD指针此时指的就是075da3f)

git reset  --hard HEAD

7)diff

先创建一个文件Test3.txt,并进行add、commit操作。

然后,更改工作区(即在创建的文件夹/库中)中Text3.txt的内容,增减内容:

增加后导致:

          工作区暂存区的内容不一样了。

此时,想进行比对:

git diff Test3.txt

 注:Git是按照为单位管理数据,所以:删除一行,添加一行。

总结:

git  diff  文件名   —— 将工作区中的文件和暂存区中的文件进行比较。

git  diff  —— 比较工作区中和暂存区中的所有文件的差异。(后面不加具体的文件名)

然后,

git add Test3.txt  —— 同步到暂存区(即:工作区中的文件和暂存区中的文件同步了)

但是,暂存区和本地库中的文件并没有同步,

下面暂存区本地库中的文件进行对比:(此时本地库对应HEAD指针(当前指针对应的版本))

git diff  HEAD Test3.txt                              (HEAD为当前指针—— 对应本地库的版本?

再commit就同步了:(再对比的话就不会有输出)

git commit -m "insert bbb"  Test3.txt

 此时,又进行了更改:改为 a,并进行了add操作(只同步到暂存区)

但是不和当前的HEAD指针进行对比了,可以和一开始提交Test3.txt的那个版本对比:(aaa)

(此时的HEAD指针则对应那个添加了bbb的版本)

git add Test3.txt

找对应的索引即可:

git diff 2ae599d Test3.txt

(git  diff  [历史版本-索引号] 文件名 —— 比较暂存区和工作区中的内容?)

3、分支的概念

1)什么是分支?

在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。

 2)通过一张图,展示分支:

 3)分支的好处

同时多个分支可以并行开发,互相不耽误,互相不影响,从而提高开发效率。

如果有一个分支功能开发失败,直接删除这个分支皆可以了,不会对其他分支产生任何影响。

4、操作分支

新建Test4.txt,并完成了add、commit操作。

【1】查看分支(branch)

git branch -v

【2】创建分支

git branch branch01(分支名)

 注: * 是用来显示你当前是在那个分支上的

【3】切换分支

git checkout branch01

 注:这里,branch01分支和主分支master后面的版本号是一样的,说明两的分支的版本相同。

5、分支冲突问题及其解决

在branch01下,对Test4.txt中的内容进行增加,并进行add、commit操作,

然后,切换到master主分支,输入git branch -v 

(注:master主分支下的Test4.txt并没有改变)

在master主分支下,修改Test4.txt的内容:

 将branch01分支 合并到 主分支:

需要先进入主分支,然后执行

git merge branch01

 显示有冲突。最后显示的 " (master|MERGING) " —— 代表处于合并状态

为什么会出现冲突? 

怎么解决?

(人为决定)公司内部商议解决,或者自己决定,留下想要的即可。

决定好之后,留下想要的然后保存。

然后执行add、commit操作:

(注:不同的是最后的commit操作后面不需要加文件名)

解决完冲突后,最后的状态也不再是  " (master|MERGING) "。

● SVN和git的区别

参考:SVN和git的区别 - 碧海无波,细水长流 - 博客园

两者之间最核心的区别就是git属于分布式控制系统,SVN属于集中式控制系统。

1、如果一旦出现断电,SVN里面的数据全部消失,但是git则不会。

2、使用SVN时,必须联网,否则不能使用。但是git只要第一次将代码下载到自己的主机上,以后        就不用联网也可以查看历史记录什么的了。

应用场景:

        以我们公司为例,SVN是专门用来维护文档的,而git则是用来维护代码的。

● 关于 SVN,git,tortoisegit,tortoisesvn

        git是3段式,中间有个暂存阶段,所以提交只是提交到本地代码库中,要提交到远程代码库,还需要推送一下。

        svn则是2段式,中间没有暂存借点,所以提交就是到远程代码库。

        svn 和git 都是版本控制系统,都有自己图形化的管理界面

        tortoisegit,tortoisesvn 是他们各自的xwindows 的外壳,tortoisegit是基于git的,安装之前必须安装git,因为他内部并没有 集成git,可能不是一个公司开发的,tortoisesvn内部集成了svn。

        git的使用参考-廖雪峰笔记:Git教程 - 廖雪峰的官方网站

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值