前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享,查看上部请点传送门

删除文件

​ git删除文件一般有三种情况,第一种是在工作区修改了文件,但是还没有添加到暂存区;第二种是已经添加到暂存区但是还没有提交到版本库中;第三种就是已经提交到版本库中。

撤销工作区的修改

​ 在工作区修改了文件,但还未添加到暂存区,即撤销在工作区对文件的修改动作,在前面查看版本状态的章节,我们已经介绍了一个命令,就是git restore <file>,新版本都会提示使用这个命令,旧版本则是提示使用git checkout -- <file>这个命令,它与新版命令的用法其实没什么区别,一样可以撤销工作区的修改,但这个命令有两种使用情况:

1.如果我们在文件修改后,文件还未添加到暂存区,想要把修改的全部撤回,那么使用该命令可以撤销修改的部分,回到这个文件的上一个版本。

2.如果文件已经添加到暂存区后,再一次修改了文件,使用该命令就可以撤销修改,回到添加到暂存区时的那一个版本。

​ 需要注意的是,git checkout -- <file>命令中有两个--,如果没有了--,它就不是撤销命令了,变成了切换分支命令git checkout,后面的章节中会提到这个命令。

从暂存区移除

​ 我们提交文件到版本库,一般需要两步,先添加到暂存区再提交到版本库,文件添加到暂存区时,我们可能不想提交了,那么就需要把他从暂存区中移除。

​ 前面查看版本状态的章节,我们已经介绍了一个命令git restore --staged <file>,同样的,这是新版的命令,我们安装了新版就使用新版命令就好了,仍使用旧版的同学,就可以使用git reset HEAD <file>这个命令,用法是一样的。

删除版本库的文件

1.git rm 删除文件

​ 一般我们在操作系统上删除文件,就是右键删除,但在git中,你在工作区删除了文件,实际上只是删除了你本地,版本库中该文件仍然是存在的,比如tets_login.py文件,在操作系统右键删除后我们查看一下git状态。

​ git知道你删除了哪些文件,并且工作区和版本库已经不一致了。这时你有两个选择,一是执行git rm <file>,并且执行git commit命令去删除版本库对应的文件,保持工作区和版本库一致。二是使用git restore <file>撤销对工作区的修改,把删除的文件还原,这样也可以保持工作区和版本库一致。

​ 我们也可以不在工作区操作(即右键删除),直接从版本库中删除文件,使用git rm <file>把删除动作添加到暂存区,然后git commit真正地从版本库中删除。我们想要真正地影响到版本库,都需要执行commit,否则它就只是对工作区产生影响。

​ 这里要注意的是,如果我们直接执行了git rm <file>,但还未提交到版本库,想要还原到工作区时,就需要先执行git restore --staged <file>移除暂存区,再执行git restore <file>撤销对工作区的修改。

2.git rm --cached 只删除版本库的文件

​ 使用git rmgit commit之后文件会从本地中删除,且会从版本库中删除。如果我们只想删除版本库的文件保留工作区的,我们可以在删除命令加上一个--cached参数,同样的执行时需要commit一下,如果想撤销,方法同上。我们不需要死记硬背这些命令,查看版本状态时它会提示你可以使用哪些命令。

3.git rm *.txt 删除符合规则的文件

​ 我们在忽略特殊文件的章节有提到过glob模式匹配,这里删除文件也支持模式匹配,比如git rm *.txt意思就是说删除所有的txt文件。

移动文件

​ git可以使用git mv <old_file> <new_file>来移动文件,需要输入旧文件名,新文件位置,新文件位置还可以重命名,如把test.txt移动到doc目录下,并且重命名为readme.txt:

​ 我们第一步执行的时候,提示No such file or directory意思是说没有text.txt文件或者目录不存在,因为我们目录没有创建,因此需要手动创建一个目录或者直接使用linux命令创建一个目录,就可以移动成功了,移动后记得要执行commit才会对版本库生效。

​ git这一个移动文件的命令实现原理很简单,其实就是执行了下面三个动作:

  • mv <old_file> <new_file>:linux移动命令
  • git rm <old_file>:删除旧文件
  • git add <new_file>:添加新文件到暂存区

版本补录

​ 什么是版本补录,就是我们在修改文件提交版本时遗漏了某些文件的提交,或者有了新的修改但又不想重新提交一个版本,希望补录在上一个版本中。

​ 我们只需要在执行commit时增加一个--amend参数,即git commit --amend,如提交了一个版本后,再次修改了readme.txt,然后执行该命令进行补录。

​ 上面补录时加了-a参数直接一步到为提交到了版本库,提交到版本库后会进入版本信息的vim(vi)界面,vim是unix系统文本编辑器,学过linux的同学应该都有了解。这里它进入vim界面我们可以修改增加版本的一些备注信息,如果不需要修改,可以通过按下Esc退出编辑状态,然后连按两次大写字母Z,就可以退出vim了。

​ 退出vim模式后,我们再查看一下版本信息就会看到最近的一个版本有两次提交记录,其中一次是补录的。

版本标签

​ git标签(tag)的作用主要是快速地定位版本以及版本间的区分,毎次发布一个版本时,我们通常都会在版本库中打上一个标签,标签可以跟踪到版本。之后不管在什么时候,我们都可以通过一个标签,把对应的历史版本取出来。因此,标签实际上就是版本库的一个快照。

​ 但你可能回想,我们commit的时候不是生成了一个版本唯一id吗?版本id是一连串的字符,不容易记住且无法辨别是哪一个版本。总而言之,标签就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

附注标签

​ git使用的标签有两种类型:轻量标签(lightweight)和附注标签(annotated)。附注标签实际就是存储在版本库中的一个独立对象,它有自身的一些校验信息,包含标签名、作者的信息、标签日期以及标签说明。一般我们都会使用附注标签,方便查看更多的标签信息。

​ 关键命令:git tag -a <tagname> -m '标签说明'这里的-a指的是附注(annotated)

​ 打上标签之后,我们查看版本信息会发现最近的一个版本多了一个tag,因为git默认标签是打在最新提交的一个版本上的。

轻量标签

​ 如果我们只是临时加的标签,不需要额外的一些标签信息,我们就可以使用轻量版标签。

​ 关键命令:git tag <tagname>,默认是给最近的一个版本打上标签

查看指定标签

​ 使用git show <tagname>查看指定标签的信息

​ 从上图我们可以看出查询的标签是一个附注标签,它有很多一些附带的信息,如标签名、作者的信息、标签日期以及标签说明;那轻量标签又是如何呢?下面这个就是一个轻量标签了,它只是简单的打了一个标签,没有更多的信息了。

查看所有标签

​ 使用git tag可以查看版本库中有哪些标签,标签名按字母排序。

查看匹配标签

​ 这里查看标签同样适用glob模式匹配,关键命令:git tag -l 匹配规则,-l表示以列表形式查看标签,如查看v开头的标签:

​ 因为只打了一个v开头的标签,因此只显示一个。

补录标签

​ 默认标签是打在最新提交的commit上的。那么如果commit时忘了打标签怎么办呢?答案就是找到历史提交的commit的id,在标签命令的然后打上标签即可。关键命令:git tag <tagname> 版本号

​ 当然,补录的时候我们是可以选择补录附注标签还是轻量标签的,根据相关命令补充参数即可。

删除标签

​ 如果标签打错了,可以删除标签。关键命令:git tag -d <tagname>,-d表示delete

​ 因为我们创建的标签默认都只存储在本地,不会自动推送到远程,因此打错的标签可以在本地直接删除。

​ 这是为什么呢,因为git pull推送时并不会把标签也推送到远程服务器上,只有通过显示命令才能把标签推送出去,关键命令:git push origin <tagname>,或者一次性推送所有标签git push origin --tags,关于推送,会在后面的章节介绍。

​ 如果标签已经推送出去,要删除标签就需要先删除本地,再从远程删除,远程删除命令:git push origin :refs/tags/<tagname>

分支管理

分支的工作方式

​ 几乎每个版本控制系统都支持分支管理,使用分支意味着你可以从开发主线上分离出来,在不影响主线的同时继续工作,在前面多次commit和查看版本,可以知道每次commit,git都会把他们串成一条时间线,这条时间线就是一个分支,目前为止,我们的git里只有一条时间线,即主分支(master分支)。

​ 另外,我们查看版本信息的时候,会发现最新的commit上总会有一个HEAD的标识,如下图:

HEAD是什么意思呢,它可以理解为“头指针”,指向当前工作区的分支,当分支很多时,git如何知道你在哪条分支上工作呢,就是通过HEAD来标识。因为当前只有master主干,没有其他分支,因此HEAD是一直指向master的。

​ 这里我们要明白,HEAD是指向分支的,不是指向commit,master(分支)才是指向commit,开始的时候,master分支是一条时间线,git用master指向最新的commit,再用HEAD指向master,这样就能明确知道当前的分支,以及当前分支的提交点,如下图:

​ 之后每一次commit,master分支就会向前移动一步,随着不断的提交,master分支的时间线就会越来越长(在没有其他分支的情况下)。

​ 当我们创建分支的时候,比如创建一个dev分支,git就会新建一个dev指针,指向跟master一样的commit,再把HEAD指向dev,表示当前是在dev分支上,如下图:

​ git创建一个分支是很快的,因为它只是增加了一个dev指针,改变一下HEAD的指向,而工作区的文件是没有任何变化的,但从现在开始,之后对工作区的修改和commit都是针对dev分支了,每次commit,dev都会往前移一步,而master指针不变,如下图:

​ 假如我们在dev分支上的工作已经完成了,就可以把dev合并到master上。那git如何分支呢?显然,直接把master指向dev最新的commit就可以完成合并了,因此,git的合并分支也很快,改一下指针即可,工作区内容不变。

​ 合并完分支之后,甚至可以把dev分支删掉,这里删除分支其实就是把dev指针删掉,因为我们已经合并完成了,删掉后,这条时间线就只剩下一个master分支。

分支操作

1.创建分支

​ 关键命令:git branch <branchname>

2.查看分支

​ 关键命令:git branch,*号代表当前所属分支

3.切换分支

​ 关键命令:git checkout <branchname>

​ 也可以直接在创建分支时加上一个-b参数(branch-分支的缩写),表示创建并切换,完整命令:git checkout -b <branchname>,相当于执行了创建和切换两个命令。

git版本控制系统小白教程(下)的更多相关文章

  1. git版本控制系统小白教程(上)

    前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享. Git介绍 ​ Git是目前世界上最先进的分布式版本控制系统.并且它是一个开源的分布式版本控制系 ...

  2. Google Code项目代码托管网站上Git版本控制系统使用简明教程

    作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这 ...

  3. Git版本控制系统VCS

    Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...

  4. git版本控制系统重新认识

    git 版本控制系统 目标:完全搞懂git分布式版本控制系统 搭建git版本控制系统 cvs集中化版本控制系统--集中式管理的服务器 git分布式版本控制系统--会将原始代码仓库镜像下来 新项目使用g ...

  5. Git(分布式版本控制系统)在Windows下的使用-将代码托管到开源中国(oschina)

    一.Git是什么?     Git --- The stupid content tracker, 傻瓜内容跟踪器.Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别?  ...

  6. 初识git版本控制系统

    当下git分布式版本控制系统越来越火,掌握git也是必须的一个技能.因此,对git做了如下学习. Git初级指南 1. 先安装git.(ps:在select cmponents处要勾选Git Bash ...

  7. Git版本控制系统之基本使用

    最早是通过接触著名的开源社区Github了解到Git的,但一直没有系统学习过.这次下定决心从头到尾系统的学一学,也将学习过程记录于此,供大家批驳.本篇文章先从以下几个方面简单了解一下Git: Git的 ...

  8. Git 版本控制系统的基本使用、常用操作

    以Ubuntu16.04操作系统为例(其他系统类似),主要记录常用的.基本操作: 0. 安装Git 分散型版本控制系统(CVS): sudo apt-get install git 1. 初始化本地配 ...

  9. 如何选择版本控制系统 ---为什么选择Git版本控制系统

    版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开 ...

随机推荐

  1. gitbook命令

    安装gitbook命令 前提:已经安装nodejs npm install -g gitbook-cli 查看版本号 gitbook -V gitbook命令 gitbook -h Usage: gi ...

  2. [javascript]JS获取当前时间戳的方法

    JavaScript 获取当前时间戳: 第一种方法:(这种方法只精确到秒) var timestamp = Date.parse(new Date()); 结果:1280977330000 第二种方法 ...

  3. [PHP] 生成二维码(两种方法)

    方法一:(调用google二维码接口,本人测试网不好,不好用!) <?php //1.封装生成二维码图片的函数(方法) /** *利用google api生成二维码图片 * $content:二 ...

  4. SpringBoot word 转换为 pdf

    转换文件 swagger 地址, 基于 SpringBoot 开发 http://119.27.167.41:8888/convertor/swagger-ui.html 带有图片的word 转换体验 ...

  5. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  6. 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...

  7. Python Flask构建微信小程序订餐系统 学习 资源

    一.Flask MVC框架结构  1.1实际项目结构   1.2application.py  项目配置文件Flask之flask-script模块使用  static.py 文件(部署到生成环境不需 ...

  8. [http 1.1] M-POST

    http://www.brainbell.com/tutors/XML/XML_Book_B/Sending_Messages_Using_M_POST.htm You can restrict me ...

  9. 用Python来揭秘吃瓜群众是如何看待罗志祥事件的

    前言 最近娱乐圈可以说得上是热闹非凡,前有霸道总裁爱小三,正宫撕逼网红女,后有阳光大男孩罗志祥,被周扬青扒的名声扫地.贵圈的爱情故事,常人是难以理解的,正如贾旭明张康这段相声所说的这样,娱乐圈的爱情总 ...

  10. Fabric的6大特性

    文章目录 什么是Hyperledger Fabric 1. 成员准入 2. 性能,可伸缩性和信任级别 3 需要了解的数据 4 通过不可变的分布式账本进行复杂查询 5 支持插件组件的模块化架构 6 保护 ...