【Git】2. Git常用命令详解、版本切换原理

时间:2021-09-12 02:27:16

一、新增文件

1、设置用户签名

签名的作用就是为了区分不同的人,方便查看版本的时候知道操作的人是谁。首次安装好git之后必须设置一下签名,否则无法提交代码。

另外,这里设置的签名跟你登录到远程仓的账号没有关系。

git config --global user.name 用户名
git config --global user.email 邮箱

2、初始化本地库

想通过git管理文件目录,首先要让git获取到管理权,所以要初始化。

git init

【Git】2. Git常用命令详解、版本切换原理

初始化成功,提示初始化了一个空的git仓库.git,这里的文件就别改动了,可以打开看看。

3、查看本地库状态

初始化本地库之后,就可以查看本地库的状态了。

git status

【Git】2. Git常用命令详解、版本切换原理

看下返回的3行分别说了啥:

  1. 本地库在master分支,master是默认生成的。
  2. 目前还没有提交过任何东西。
  3. 除了没有提交过,而且现在还没有什么东西需要你提交。

这时候新增一个文件的hello.txt,再用git status看这里就不一样了。

【Git】2. Git常用命令详解、版本切换原理

出现一个新行:Untracked files,未被追踪的文件,红色标记。说明这个文件只在工作区,但是没有被git追踪。

最后一行的描述也变了,说目前还没有提交文件,但是存在未被追踪的文件。

4、添加暂存区

git的提示做的还是很友好的,基本上都会给你操作提示。接着上面来,现在如何让文件被追踪,提示说了,用git add

git add

【Git】2. Git常用命令详解、版本切换原理

出现一个warning,说的是换行符自动替换处理,因为那个文件我直接在git-bash窗口用linux命令新建的,所以自动转化了win用的CRLF,不用管它。

现在重新查看下git status

【Git】2. Git常用命令详解、版本切换原理

绿了,绿了,只不过不是古天乐(这是一个传奇页游广告的梗),而是刚才的hello.txt文件。

5、删除暂存区

现在这个文件也只是在暂存区里,暂存区里的文件是可以删掉的。如果现在我不想让这个文件产生一个历史版本,那么要在提交到本地仓库之前删掉它,就在暂存区删吧。

同样git也给了提示。

git rm --cached <file>

【Git】2. Git常用命令详解、版本切换原理

成功删除,但是记住这里删的是暂存区的,你本地工作区的文件没动,用ll查看一下。

【Git】2. Git常用命令详解、版本切换原理

6、提交本地库

把文件重新提交到暂存区,接下来就可以提交到本地库,形成一个历史版本了。

git commit -m "日志信息" 文件名

【Git】2. Git常用命令详解、版本切换原理

提交成功,看提示信息:

  • [master (root-commit) a70616d],这里的a70616d就是版本号了,这个是简短版的。
  • 1 file changed, 19 insertions(+),1个文件被改变,插入了19行信息(文本里有19行内容)。

7、查看版本信息

刚才提交本地库产生一个版本信息,可以用这个命令查看。

git reflog

【Git】2. Git常用命令详解、版本切换原理

显示了刚才提交的版本信息。

  • a70616d是版本号。
  • (HEAD -> master代表指针指向这个第一个版本。

    还可以用这个命令查看更相信的版本信息:
git log

【Git】2. Git常用命令详解、版本切换原理

可以看到这里的版本号很长a70616d3fc1c69f948a7b0d4ed2b640bedb1e747,这个就是完整版的版本号了。

二、文件被修改后

上面是新增一个文件,但是最多的场景还是同一个文件被反复修改,现在我去修改hello.txt文件,增加写内容,然后git status

【Git】2. Git常用命令详解、版本切换原理

提示有一个文件被修改了,红色表示还没有被追踪,那么重复上面的动作,提交到暂存区即可,用git add。提交成功了再次查看。

【Git】2. Git常用命令详解、版本切换原理

最后再提交本地库。

【Git】2. Git常用命令详解、版本切换原理

这里看到最后的提示,有一行新增,一行删除,可是我只是在第一行后面继续增加了内容。

因为git里面是按照行来维护文件的,我修改了第一行内容,实际上对于git来说,要先删除掉之前的第一行内容,然后再增加修改后的第一行内容。

现在查看版本信息git reflog

【Git】2. Git常用命令详解、版本切换原理

可以看到:

  • 有2个版本信息。
  • 此时的指针是指向第二个版本。

三、版本穿梭

比如现在我想回退到之前某一个历史版本。

先查看历史版本,git reflog,目前我有3个版本。

【Git】2. Git常用命令详解、版本切换原理

我现在要回到第二次提交的版本,复制出版本号,使用如下命令:

git reset --hard 94ca3de

【Git】2. Git常用命令详解、版本切换原理

此时我再查看版本,发现指针已经移到了第二次提交的版本上了。

【Git】2. Git常用命令详解、版本切换原理

至于,第一行是告诉你做了一个reset的操作,目标版本号是什么。

git切换版本的原理

底层其实是移动HEAD指针。

可以先打开本地的.git下的HEAD,可以看到里面指针指向master,说明当前是在master分支上。

【Git】2. Git常用命令详解、版本切换原理

接着,可以打开.git/refs/heads/下面的master,可以看到里面的内容就是当前所在版本的版本号。

【Git】2. Git常用命令详解、版本切换原理

当继续切换版本到a70616d的时候,master文件里的版本号也会变更为对应的。

【Git】2. Git常用命令详解、版本切换原理

用示意图来描述的话,其实在我们刚提交完第三个版本的时候,应该是这样的:

【Git】2. Git常用命令详解、版本切换原理

当我们切换版本的时候,其实就是指针变了,比如现在切换到第二版本:

【Git】2. Git常用命令详解、版本切换原理

接下来,到了分支相关了。

【Git】2. Git常用命令详解、版本切换原理的更多相关文章

  1. Git 入门和常用命令详解

    git 使用使用教程   git 使用简易指南  常用 Git 命令清单 下载   https://git-scm.com/downloads 工作流 本地仓库由三部分组成. 工作区:保存实际的文件( ...

  2. Kubernetes&comma;kubectl常用命令详解

    kubectl概述 祭出一张图,转载至 kubernetes-handbook/kubectl命令概述 ,可以对命令族有个整体的概念. 环境准备 允许master节点部署pod,使用命令如下: kub ...

  3. Hexo系列&lpar;三&rpar; 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  4. hbase shell基础和常用命令详解&lpar;转&rpar;

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  5. H3C常用命令详解

    H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...

  6. hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  7. DOS常用命令详解

    DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...

  8. Linux常用命令详解上

    Linux常用命令详解上 目录 一.shell 二.Linux命令 2.1.内部命令与外部命令的区别 2.2.Linux命令行的格式 2.3.编辑Linux命令行的辅助操作 2.4.获得命令帮助的方法 ...

  9. samtools常用命令详解(转)

    转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...

  10. cisco常用命令详解

    cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...

随机推荐

  1. Sort Colors &lbrack;LeetCode&rsqb;

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  2. UWP深入学习三:依赖属性、附加属性和数据绑定

    Dependency properties overview Custom dependency properties Attached properties overview Custom atta ...

  3. Form&lowbar;Form Builder Export导出为Excel(案例)

    2014-01-09 Created By BaoXinjian  

  4. C&num;App&period;config的使用

    为什么使用App.config, 在连接数据的时候将连接字符串写在了类中,如果更换数据库地址,则需要修改这个类,然后重新编译才可以重新连接数据库.在这个时候我们就可以将连接信息放到配置文件App.co ...

  5. Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作

    我们在学习了Linux系统编程之后,需要一些实战项目来提高自己的水平,本系列我们通过编写一个爬虫程序,将我们学习的知识进行综合应用,同时在实现项目的过程中逐渐养成一些有用的思维方式,并具有初步的软件开 ...

  6. KVM的虚拟化研究及应用

    引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率.随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为 ...

  7. 1941&period; Scary Martian Word

    1941. Scary Martian Word 这道题 一个长度为3的字符串视为 一个 火星文 字母(ASCII 33-122) ,给出一个火星人认为恐怖的单词(由火星字母组成) 然后 给你一篇文章 ...

  8. nvl isnull coalesce

    oracle 的NVL(col,0)是判断如果col字段为空的时候赋值0. postgresql里也有类似的方法 SELECT coalesce(collect_result,0) as collec ...

  9. Vim安装YouCompletMe插件。

    1.Centos7.0自带含有支持python2.x的vim.(:version 后看python+则支持,python-则不支持)若不支持,卸载vim后源码编译安装. yum install pyt ...

  10. 使用SSM重新开发计科院网站

    一.游览 在游览器地址栏输入:http://localhost:8080/index,即访问计科院首页,由于前期对数据库以及JavaBean的设计考虑不够充分,导致后期的代码臃肿,所以项目启动时对首页 ...