一、新增文件

1、设置用户签名

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

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

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

2、初始化本地库

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

git init



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

3、查看本地库状态

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

git status



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

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

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



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

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

4、添加暂存区

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

git add



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

现在重新查看下git status



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

5、删除暂存区

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

同样git也给了提示。

git rm --cached <file>



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

6、提交本地库

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

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



提交成功,看提示信息:

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

7、查看版本信息

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

git reflog



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

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

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



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

二、文件被修改后

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



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

最后再提交本地库。

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

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

现在查看版本信息git reflog



可以看到:

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

三、版本穿梭

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

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



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

git reset --hard 94ca3de

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



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

git切换版本的原理

底层其实是移动HEAD指针。

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

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

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

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

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

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

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

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

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

  2. Kubernetes,kubectl常用命令详解

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

  3. Hexo系列(三) 常用命令详解

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

  4. hbase shell基础和常用命令详解(转)

    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. 图文详解:内存总是不够,我靠HBase说服了Leader为新项目保驾护航

  2. Codeforces Round #553 B. Dima and a Bad XOR

    题面: 传送门 题目描述: 题意很简单:在一个N*M的矩阵中(N行M列),问是否可以:每行选一个整数,使他们的异或和大于0.如果不可以,输出"NIE":如果可以,输出"T ...

  3. 【odoo14】第二十一章、性能优化

    通过odoo框架,我们可以开发大型且复杂的应用.良好的性能是实现这一目标的基础.本章,我们将探讨如何提高应用性能.同时,我们也会讲解找出影响性能的因素. 本章包含以下内容: 记录集的预读取模式 将数据 ...

  4. .Net5下WebRequest、WebClient、HttpClient是否还存在使用争议?

    WebRequest.WebClient.HttpClient 是C#中常用的三个Http请求的类,时不时也会有人发表对这三个类使用场景的总结,本人是HttpClient 一把梭,也没太关注它们的内部 ...

  5. SFDC 删除操作时:验证或触发后续操作的一般解决方案

    删除操作比较特殊,不能通过Workflow Rule和Process Builder,Validation Rule来Check和相应做后续操作. 目前调查只有两种工具可以监听到删除操作: Apex ...

  6. 系统编程-信号-信号发送kill、raise、alarm

    信号发送 kill 和 raise函数 kill函数参数详解: 实验1 raise和kill 的使用 #include <stdio.h> #include <signal.h> ...

  7. 痞子衡嵌入式:从头开始认识i.MXRT启动头FDCB里的lookupTable

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT启动头FDCB里的lookupTable. 一个MCU内部通常有很多外设模块,这些外设模块是各MCU厂商做差异化产品的本质, ...

  8. 如何从 dump 文件中提取出 C# 源代码?

    一:背景 相信有很多朋友在遇到应用程序各种奇葩问题后,拿下来一个dump文件,辛辛苦苦分析了大半天,终于在某一个线程的调用栈上找到了一个可疑的方法,但 windbg 常常是以 汇编 的方式显示方法代码 ...

  9. 深入了解springcloud gateway 的限流重试机制

    前言 前面给大家介绍了Spring Cloud Gateway的入门教程,这篇给大家探讨下Spring Cloud Gateway的一些其他功能. Spring Cloud Gateway中的重试 我 ...

  10. 这可能是最容易理解的 Go Mutex 源码剖析

    Hi,大家好,我是 haohongfan. 上一篇文章<一文完全掌握 Go math/rand>,我们知道 math/rand 的 global rand 有一个全局锁,我的文章里面有一句 ...