如何优雅的使用版本管理工具GIT

一、概述

对于一个开发人员来说,不管你之前用的时SVN又或者时其他的版本管理工具,我想你一定知道又Git这样个分布式的管理工具,没吃过猪肉还没见过猪跑嘛!但是由于公司原因,很有可能出现某些开发人员只用过SVN而没有去真正的在生产环境下去使用过git,换工作的时候,新公司用Git导致无法快速的进入正常工作状态(当然这写对于一些老友条来说完全不存在的!!),那么今天就来分享下,如何优雅的从SVN转换到Git开发,本人目前在搞android开发,所以暂时说android的。
我们要理解后面的某些命令我们就先大概对几个概念有个印象:


1、工作区

工作区其实就是我们当前修改、创建、删除的文件保存的地方


2、缓存区

所谓的缓存区,其实就是我们将工作区的内容通过git add命令所提交到的地方 ,当然也有人叫索引库,貌似专业点^-^!


3、本地版本库

本地版本库其实就是一个完整的版本库,这个当我们使用git commit命令之后,缓存区的内容才会进入本地版本库,这里要搞清楚的是,commit之后还不是提交到远程库的。

4、远程版本库

远程版本库就是我们的服务器那里了,当我们执行了git push命令之后,本地版本库的内容才会提交到远程版本库的。

二、Git的安装与配置

在这里我们介绍Ubuntu上Git的安装,虽然Git的安装在Windows下是有一些差异,但是安装完成后使用就跟Ubuntu下时一致的了,所以我们接下来进入Ubuntu的安装过程

1、安装命令

sudo apt-get install git

2、配置身份标识

git config –global user.name “your name” //配置用户名 
git config –global user.email “your email” //配置email 

其实这两项配置可以随便定义,并不会对你使用git造成什么影响,只要能标识你的身份即可,这个只是方便后续提交代码的时候能在远程版本库中分辨哪个版本时谁提交的而已,并不指定有意义的用户名跟邮箱,只是习惯性这样配置而已!

三、实际项目操作

首先,我们刚开始去到公司,先注册公司代码管理平台帐号密码(我们公司用的是GitLab),登录上去之后能看到属于自己的项目,我们用ssh的方式去将代码clone下来,别紧张,还有些事要做呢,我们使用ssh的使用时要ssh_key的,否则会提示没有权限的。

1、生成ssh_key

在Ubuntu下使用命令:ssh-keygen -t rsa -C "email”,然后一直enter完成后就可以生成ssh_key了,至于这里的email并不需要太过在意,随意点就行,当然我们默认都用自己的邮箱而已。命令执行完成后会在目录/home/xxxx/.ssh目录下生成对应的文件(xxx表示Linux当前用户目录),在其中我们能看到一个id_rsa.pub文件如下:

复制文件中所有内容(注意是所有内容),然后去到GitLab平台下登录打开Settings--->SSH Keys,创建一个ssh_key,如下:

如何优雅的使用版本管理工具GIT_第1张图片

2、clone命令

好了,完成这些步骤我们就可以真正的clone代码了,假如项目的URL为[email protected]:ruanwenjiang/ETCdemo.git,这里的要换成你公司的IP哦,那么我们可以通过下面的命令拉取代码了:

git clone [email protected]:ruanwenjiang/ETCdemo.git

出现下面的提示,时就ok了:

如何优雅的使用版本管理工具GIT_第2张图片
这里有一个问题要提下,就是我们很多人在使用Linux系统的时候习惯了用sudo,那么当我们创建一个准备用于clone项目的目录时,如果使用了sudo,那么clone的时候一直会提示输入密码的,权限问题!!!这个时候只需要改下目录的所属就可以了。。。

3、选择分支

有的小伙伴一看到代码下来了,就哗啦哗啦的开始撸代码了,其实不用着急,这个时候你clone下来的代码仅仅时master分支而已,很多公司都会新建一条开发分支专门用于开发用的,比如说dev分支,我们不妨使用git branch -a命令查看下远程库都有哪些分支:



这里我们可以看出,是有一个develop分支的(至于开发分支时哪条,自然有人会告诉你),我们这里假设develop就是开发分支,那么我们用下面的命令去把该分支拉取下来即可:

git checkout develop

如何优雅的使用版本管理工具GIT_第3张图片
图中我们可以看出,我们本地已经生成了一个跟服务器一模一样的分支了!这样我们就可以切换到该分支快乐的开发了!

四、提交项目

上面我们提到只是其中一种情况,也就是接手已知项目的情况,那么假如服务器上没有代码,老大需要我们自己撸一个项目提交上去呢?这个时候只是多了一些操作!

1、首先我们先在GitLab上面新建一个工程,当然工程什么都没有如图:

如何优雅的使用版本管理工具GIT_第4张图片

创建工程没什么好说的,命名-->填写一些描述--->然后create即可!

2、紧接着切换到我们本地项目的跟目录下执行如下命令

3、这样你的项目就初始化成了Git仓库了,紧接着执行

git add -A
git commit -m "首次提交项目"

这样项目就提交到了本地版本库了,注意:这里仅仅是提交到本地版本库,跟远程库毫无关系

4、创建远程库别名

一般用origin即可,当然你也可以用其它的,前提是呢得记住,后续提交代码时会用到

git remote add origin [email protected]:vrius/Test.git

5、将远程分支跟本地分支关联起来

git branch --set-upstream-to=origin/master master

这里的前一个master是远程分支名,后一个是本地分支名,当然这里的前提时我们先在远程库创建master分支,注意,这种方式只是对两个分支做了关联,而不会把代码真正送到远程库中,最终我们还是需要使用git push命令进行代码的真正提交。

由于上面的方式有点烦,所以我个人比较喜欢使用下面的方式,下面的命令并不需要我们预先到远程库创建分支:

git push -u origin master

6、忽略文件

我们在提交项目之前最后编辑下忽略文集,我们需要先创建并配置忽略文件.gitignore,针对android项目配置如下:

*.iml
*/*.iml
*.jks
gradle/
*/.idea/
.idea/
.gradle
build/
*/build/

如无意外,项目就提交上去了,至于上面用到的几个命令git add,git commit,git push是什么意思,后面补充说明!

到这里我们已经可以进行正常的开发工作了,但是代码写完了又要怎么提交呢?如果出错了又怎么回退版本呢?冲突了怎么办呢?下面我们好好介绍下一些常用的命令!

五、git常用命令

1、git add

这个命令是将工作区的文件提交到缓冲缓冲区的,日常开发常用的有下面三种方式:

git add -A //如果我们加上-A这个参数,表示提交所有工作区的文件,包括未被跟踪文件
git add . //提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)

其实平时的开发,上面这三条指令是够用了的,但是我们依然偶尔会用到更加复杂的功能,比如说将已提交到缓冲区的文件剔除,这就不是上面那三条指令能解决的了!那我们接下来看看一个-i的参数,通过下面几个步骤观察看看都有那些特殊的用法:

第一步:

我们先修改我们项目中的一个文件然后执行git add -i,会出现如下现象:

如何优雅的使用版本管理工具GIT_第5张图片

此时我们会看到显示我们修改的文件unchanged,这里就表示我们的文件还没有被add到缓冲区,其中+1/-0表示文件被添加了一行删除了0行,最后是路径;至于Commands这个子命令一会再讲。。。

第二步:

我们执行git add .命令,将刚才的文件添加到缓存区中,然后再执行git add -i命令,看看有什么变化:

如何优雅的使用版本管理工具GIT_第6张图片

此时,我们看到unstaged标签已经变成了nothing了,这就表示我们的文件已经被提交到了缓冲区中。

OK,那么我们回到我们刚才的问题,我们如何将已经提交到缓冲区的文件剔除呢?这时我们就可以用到Commands这个子命令集了,从图中我们看到git给我们提供了8个子命令,我们在What  now>处输入对应指令前面的数据就可以执行响应的操作了,这里我们主要使用两个,revert跟diff指令:

子命令revert

如何优雅的使用版本管理工具GIT_第7张图片

这里我们输入了3,然后回车,出现了一个列表,这时我们只要输入对应的行号回车就可以了,下面我们看下:

如何优雅的使用版本管理工具GIT_第8张图片

很明显,我们的SendMnaager.java文件又变成了未提交到缓冲区了,,,,

子命令diff

diff命令的作用是对比当前提交到缓冲区的文件与原版本之间都有哪些区别,其操作的步骤也跟revert一样,What now>输入对应的命令号然后回车,就会出现缓冲区文件列表,然后输入你想查看的文件的列表号就可查看到该文件的与原版本的差异了,如下图:

如何优雅的使用版本管理工具GIT_第9张图片

这里我们看到,这个文件是多了绿色加号的地方,仅仅是多了一行空行而已。。。。,偶尔会用到的也就这两个子命令了,至于其它的子命令大家可以自己查看相关文档。


2、git commit

这个命令是将缓冲区的文件提交到本地版本库,首先我们提交一个版本看看具体提交完之后会出现什么:

如何优雅的使用版本管理工具GIT_第10张图片

如何优雅的使用版本管理工具GIT_第11张图片

提交完之后我们用git log命令看到生成了提交日期,提交人,还有一个很长的字符串,这就是所谓的commit id,用来标识每一次提交的,接着我们用git status可以看到,我们当前的分支已经领先了远程分支一个提交了,其中-m参数是用于注释用的,那么提交完后问题来了,我们如何回退呢?我们反悔了怎么办?这就是commit指令常用的第二个操作了:

首先我们看下我们之前都有哪些版本用git log:

如何优雅的使用版本管理工具GIT_第12张图片

这里我们看到,在eb9df63之前还有一个版本的,那么我们就回退到提交备份的那个本版,执行如下命令:

git reset --hard a0cdd2911fde2ee06a327381bd09cdcb4d03d625

如何优雅的使用版本管理工具GIT_第13张图片

命令执行完后,我们再次git log,发现我们提交的那个版本已经不见了,但这这里特别要注意,就是回退之后,我们之前所有的修改是会被我们所回退到的版本给覆盖掉的!!!!所以这个命令一定要慎用,最好不用,如果提交的版本有问题,大不了重新修改再提交一个版本就是,当然也是有补救方法的,往下看哈。。。

3、git push

接下来我们说下push命令,这个命令是将本地本版库当前分支与远程本版库对应分支的差异代码提交到远程版本库,使用这个命令的时候,我们要注意几个问题:

一般形式

git push的一般形式为git push origin master:master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。

简写形式

当然我们也可以省略掉远程分支,如:git push origin master,但是这里要注意了,我们不能省略掉本地分支,比如:git push origin :master,这样就相当与推送一个空分支到远程的master分支,其实就是删除命令了,所以我还是建议大家最好写完整的,安全第一。。。

模式问题 

很多刚开始使用git的朋友为了方便,直接就git push的方式去提交代码到远程库,当我们的代码只有一个分支的时候,或者说你的git是2.0以后的本版的话是没有问题的,但是如果有多个分支并且是git2.0以下的版本的话,那么呢就要注意了,因为默认情况下git push会推送所有分支的提交,这是由于matching模式引起的,我们可以通过git config -l查看,如下:

如何优雅的使用版本管理工具GIT_第14张图片

我们可以看到,我们的git 是1.9.1本版的,默认的推送模式是push.default=matching,所以我们有多个分支的时候直接git push是有可能出问题的,这时我们要不就用前面说的方式指定推送的分支,要不就修改push.default,修改方式如下:

git config --global push.default matching
git config --global push.default simple

4、git status

该命令时会返回当前版本库的工作区以及缓冲区的状态,比如说哪些文件被修改、添加、删除,又有哪些文件没有提交等等信息,这个比较常用,但是也多数用来查查状态而已,如下:

如何优雅的使用版本管理工具GIT_第15张图片

5、git diff

该命令会返回当前跟版本库的差异,不带任何参数的情况下会显示所有的差异,当然我们也可以在后面加上具体的文件名针对某个文件进行对比,如下:

如何优雅的使用版本管理工具GIT_第16张图片

这里我们可以看到,SendManager这个类+了两行空行,-号地方删除了一行。。。

6、git log

默认情况下这个命令会返回当前分支的操作记录,操作记录中包括了,操作的注释,commit id等内容,这个上面我们讲回退的时候用过,不清楚的可以反回去看看;

当然,如果git log只能看到这些信息那就有点鸡肋了,曾经有那么一次,我跟同事共同开发一个项目,结果上线后出了个bug,最后找到出问题的代码后同事一口咬定是我写的,我没说啥,只是默默的git log -p查了一下,截图发给老大,,,,其实加上p参数之后我们能看到每一次提交的记录,以及每次提交都有哪些文件做了哪些修改,想甩锅过来?不存在的!下面我们看下加p参数后的情况:

如何优雅的使用版本管理工具GIT_第17张图片

7、git reset --hard HEAD

回退到上一个版本

8、git reset --hard commit id前六位

回退到指定的commit id 的版本,这个之前已经说明,这里就不再重复了!

9、git reflog

这个命令也是返回所有commit 记录,跟git log差不多,但是有一个比较特殊的地方就是他能够返回之前回退过的版本的commit id,开发中有那么一种状况,就是当我们从版本A去到回退到版本B的了,不久之后我们又想回到版本A,但是此时git log 命令是没法找到版本A的commit id号了,这时候我们可以使用git reflog命令了,时光倒流,贼牛逼!之前我们有回退过一个版本,我们不妨试试这两个命令看下差异:

如何优雅的使用版本管理工具GIT_第18张图片

很明显,被我们回退过的eb9df63这个版本,我们用git log是不能找到了,而git reflog就能找出来。。。

10、git checkout

我们平时用到这个命令的时候一般用于三种场景,第一种就是用于撤销修改,注意,这里的撤销针对的时工作区的文件,git checkout命令是无法撤销缓冲区跟本地版本库的内容的;第二种就是用于分支的切换;第三种是用于代码的检出,下面我们一一介绍一下。

场景一:

首先我们修改一个文件,然后用git status查看状态,再使用git checkout命令对该文件的修改进行撤销,如下:

如何优雅的使用版本管理工具GIT_第19张图片

显然,chechout命令是起作用了,当然我们可以不指定任何文件,这样git会把所有的缓冲区数据都撤销回来的。

场景二:

切换分支这个操作是最常用的了,接下来我们先用git branch查看本地分支情况,这时绿色的分支就是我们当前所处的分支,然后使用git checout dev,这样我们再次用git branch查看的时后,绿色的就变成了dev,代表我们切换成功了,如下:

如何优雅的使用版本管理工具GIT_第20张图片

注意:我们在切换分支之前,一定要先把当前分支的内容提交了也就是commit,要不然切换过去之后会把修改的内容带过去的,比如说如下情况:

如何优雅的使用版本管理工具GIT_第21张图片

这里我们在dev分支对SendManager.java文件进行了修改,然后直接git checkout master切换到master分支,我们看到提示SendManager.java文件前面有一个M字母,其实就是merge的意思,我们用git status查看确实是这样的。。。

注意:这里有一种情况比较特殊,比如是我们要切换的目标分支并不存在,此时我们执行checkout时会创建该分支,即git checkout -b dev-2,其中加-b参数意义是创建之后会直接切到dev-2分支中上去。

场景三:

场景三所谓的代码检出指的是我们将远程库上的代码拉下来,比如说我们刚开始使用git clone命令将代码同步下来,但是需要注意的的是,git clone命令默认拉取到的是master分支,假如我们又有小伙伴在远程库那我们接下来说的git checkout命令就能派上用场了。

首先我们去远程库创建一个test分支如下图:

如何优雅的使用版本管理工具GIT_第22张图片

紧接着我们执行git checkout -b test origin/test,如下:

啊哈,内心是崩溃的,我们明明在远程库创建了test分支,其实很正常,git本来就有一个完整的本地版本库,我们刚才紧紧是在远程创建了而已,并没有同步到本第版本库,所以当然报错,我们不妨git pull然后再试试看

如何优雅的使用版本管理工具GIT_第23张图片

这次整个世界都安静了趴。。。。。

11、git branch

git branch这个命令也是有大用的下面我们列举几个常用的

git branch

这个命令就没啥特别的,只是看我们本地版本库的分支情况,如下图,绿色的表示的表示我们当前所处的分支,其中加上-a参数之后就就会连带远程版本库的所有分支显示出来了,这里我们看到带remotes的就是远程库的意思了,细心的朋友应该注意到了,我们有一个dev是远程库没有的,这是因为我们创建了dev之后并没有往远程库推。

如何优雅的使用版本管理工具GIT_第24张图片

git branch dev

这个命令会新建一个分支,dev为新建分支的分支名(名字不能与已存在的分支名重复),需要注意的是我们创建新分支的时候是基于那个分支创建,那么我们就先切换到哪个分支,如下:

如何优雅的使用版本管理工具GIT_第25张图片

git branch -d dev

这个命令的-d参数是删除分支的意思,这里是指删除名字为dev的分支,如下:

如何优雅的使用版本管理工具GIT_第26张图片

注意这里我们仅仅是删除了本地分支,我们远程的分支还是在的,那么我们要如何去删除远程的分支呢?且看下面我们如果删除test分支:

如何优雅的使用版本管理工具GIT_第27张图片

git branch -m old_name new_name

这个命令是给原有分支改名的,这点我们偶尔也会用到,如下,我们把dev改名为new_dev:

如何优雅的使用版本管理工具GIT_第28张图片

git branch --edit-description

说实话,我真的很少看到有人用这个命令,具体为什么我不太清楚,但是我总觉得这个命令真的很好用,由于我们项目上有很多的分支,有些就因为要出一个演示的版本我就要拉一个分支出来,这是后哪怕是我命名比较注意了,当存在几十个分支的时候我还真不太分得清楚有些分支用来干嘛的。。。所以我一般使用这个命令给分支加上对应的描述,接下来我们给我们的new_dev分支加上一些描述信息:

首先我们执行git branch --edit-description new_dev命令,会出现一下界面:

如何优雅的使用版本管理工具GIT_第29张图片

我们在这里写入自己的描述信息,然后,然后通过GNU窗口底部的提示进行保存:

如何优雅的使用版本管理工具GIT_第30张图片

这里我们通过Ctrl+O进行写入,然后回车就写入成功了,然后Ctrl+X离开即可,保存完之后我们可以通过如下命令查看到我们对new_dev分支添加的描述信息了:

当然,有的朋友并不喜欢这种方式,那也没关系,直接在项目里价格md文件进行说明即可,这个看个人喜欢。。。

会12、git remote

顾名思义,这个命令跟远程库是有关系的,当我们需要关联远程库的时候,这个命令就比不可少了,当我们需要关联某个远程库的时候,我们可以通过如下命令

git remote add

如何优雅的使用版本管理工具GIT_第31张图片

这里我们首先git init初始化了一个空的仓库,然后通过git remote add origin git@xxxx:ruanwenjiang/AXETC.git的方式关联我们的远程库,其中origin是我们给远程库起的别名,后面的就是url了,回车后没有任何提示,按照linux的艺术没有消息就是好消息,也就是说我们已经关联成功了,可以铜鼓git remote查看库名,紧接这个我们git branch -a查看分支,发现没有热和显示,其实我们的remote命令仅仅是起到关联作用而已,并不会拉取任何分支信息,我们此时可以通过git pull origin master去拉去指定分支内容了。

PS:其实git remote add origin git@xxxx:ruanwenjiang/AXETC.git这个命令跟多用于往远程库提交项目用的,因为拉取代码的时候更多用的是git clone命令的,但是方法多种多样,大家看喜欢什么方法咯。。。

git remote show origin

通过过这个指令,我们可以查看当origin这个远程库的分支与本地分支的关联情况:

如何优雅的使用版本管理工具GIT_第32张图片

13、git clone

这个命令是向远程库拉去代码用的,如下:

如何优雅的使用版本管理工具GIT_第33张图片

这里要注意的是,这种方式是将整个远程库复制下来,包括最外层的目录,也就是说我们拉下来的那个目录其实就相当于我们使用git init方式创建出来的仓库,所以我们需要cd到AXETC那个目录才算是操做该仓库,而不是我们执行git clone目录的地方。

15、git pull

同步远程版本库的代码到本地的当前分支,这个我们要养成习惯,就是在我们push代码的时候最好先做pull的操作,当然它还有一个兄弟命令git fetch,这两个命令同样都是同步远程,但是git pull会直接merge同步下来的代码,而git fetch并不会主动帮我们同步,我们可以先通过git diff 命令去做对比,然后在通过merge指令手动合并,这个命令相对更安全些,比如说像下面这样:

git fetch origin master:tmp //从远程仓库master分支获取最新,建立临时tmp分支
git diff tmp //將当前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支
git branch -d tmp //用完后删除tmp分支

16、git merge

这个命令时合并分支的命令,当我们在开发分支可发并测试完成之后,我们就需要发布版本了,这个时候我们就可以将我们开发分支的代码合并到master分支了,执行git merge命令之前,我们需要先切到master分支(因为我们将要合并到master),当然执行合并命令的时候我们偶尔会出现合并冲突的问题,下面我们模拟一次merge过程,并模拟出现冲突并解决冲突:

第一步

我们先在master分支的SendManager.java文件的某一行增加一个test()方法,然后再到dev分支的SendManager.java的同一行增加test2()方法。

第二步

紧接着我们回到master分支,然后执行git merge dev命令,表示我们要把dev分支合入到master分支,结果如下:

很明显,提示我们冲突了,并且告诉了我们哪个文件冲突了。。。

第三步

接下来我们就要解决冲突了,那么我们先打开SendManager.java文件,看看到底怎么样:

如何优雅的使用版本管理工具GIT_第34张图片

此时,我们看到了一堆乱七八糟的东西,先不慌,我们慢慢分析,我们看到有<<<<<<< HEAD、=======、>>>>>>>> dev三种莫名其妙的符号,其实它的意思是说<<<<<<< HEAD到=======之间的内容跟=======到>>>>>>>> dev之间的内容冲突了,带HEAD的表示master分支的内容,而dev表示的就是dev分支的内容,这个时候我们如果两部分的内容都需要的话将<<<<<<< HEAD、=======、>>>>>>>>符号删除即可,如果我们只想保留某dev部分的话就删除<<<<<<< HEAD到=======之间的内容,然后删除所有符号即可,这里我们保留dev分支的,删除号之后如下:

第四步

那么接下来我们继续合并:


解决冲突之后合并之前记得先提交,这里我们相当与对工作区进行了修改,否这还是会提示合并失败的!!!!

18、git push origin master  

前面我们说了,创建一个开发分支直接在远程仓库创建,然后再用git checkout 命令同步下来,其实有点low,我们完全可以在本地创建完成后推送到远程版本库中,就是使用上面的命令其中origin时远程版本库的名称,这个我们可以通过git remote -v命令查看,mater就是我们要推送的分支,当然也可以时其他分支,成功后会返回如下信息:

$ git push origin dev
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (15/15), 1.39 KiB | 0 bytes/s, done.
Total 15 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To [email protected]:vrius/RemoteLib.git
1cf826b..258b818  dev -> dev

使用push命令的时候要注意一个模式的问题,这个前面已经提到过,不记得的可以返回去看看!


至此,我们有了这些基础,其实已经可以正常的工作了,因为以上的东西基本都是平时工作常用的东西,只是后期发布项目的时候,还会有个对tag标签的操作,我们接着看tag相关的。

六、tag标签操作

我们之前说过,master是指向commit的,也就是说我们要找到某个版本就需要知道哪个版本的commit id,那么如果有一天你们的应用已经开发到了3.0,而你们老大叫你找出1.0版本的代码给他,那么你是不是懵逼了,master分支上那么commit id,要找多久啊,当然你可以建立一个映射表记录哪个commit id对应哪个版本,但是有更好的办法的,那就是标签,也就是在某个版本的commit处打上标签,这样就可以通过标签快速的定位到该版本了!

1、git tag -a   -m "desc"

这是一个打tag的完整命令,其中name表示我们tag的名称,commit id表示我们需要针对那个提交生成tag,-m是我们需要的描述,那么接下来我们先打个tag看看:

惯例,没有消息就是好消息,我们用git tag命令查看所有的tag,就能看到我们的v1.0了,当然如果我们想要看更详细的信息可以使用git show v1.0 这个命令。

2、git checkout v1.0

这个命令就是我们tag的真正作用所在了,不管我们后续开发到了哪个版本,我们都可以用该命令回到我们打tag的地方,下面我们试试看。

首先我们在v1.0这个版本的基础上在SendManager.java文件上添加一行注释,如下

紧接着我们提交并push,然后我们执行git checkout v1.0指令,在看看SendManager.java文件的变化,如果注释消失了,就证明我们已经回到了打tag时候的版本了,结果如下:

如何优雅的使用版本管理工具GIT_第35张图片

这时候,我们看到了一个新的分支,并且说明了是分离自v1.0同时自动帮我们切换到了这个分支上了,上面还有一大窜提示,大概意思是说我们已经处在了那个分离出来的分支的HEAD上,我们可以该它,提交它这样做不会影响到其它分支,如果我们想要新建一个分支保存它我们可以执行git checkout -b new_branch_name这个命令。。。

此时你再去看SendManager.java文件上的注释,真的消失了的,,不骗你!

3、git tag -d v1.0

删除标签,这个就不多说了,小伙伴们自己可以试试看!

4、git push 远程库名 标签名

推送单个标签

5、git push 远程库名 --tags

推送所有标签

THE END

至此,我知道的关于git的东西基本都在这里了,当然git的功能远远不止于此,当时功能再多用不到的话记那么多我感觉也没必要,够用也就差不多了,有时间还不如多花在代码上!最后,如果有问题的地方欢迎大家指出,谢谢!!

^_^! ^_^!

 

你可能感兴趣的:(android开发日志)