【Git】2. Git常用命令详解、版本切换原理
一、新增文件
1、设置用户签名
签名的作用就是为了区分不同的人,方便查看版本的时候知道操作的人是谁。首次安装好git之后必须设置一下签名,否则无法提交代码。
另外,这里设置的签名跟你登录到远程仓的账号没有关系。
git config --global user.name 用户名
git config --global user.email 邮箱
2、初始化本地库
想通过git管理文件目录,首先要让git获取到管理权,所以要初始化。
git init

初始化成功,提示初始化了一个空的git仓库.git,这里的文件就别改动了,可以打开看看。
3、查看本地库状态
初始化本地库之后,就可以查看本地库的状态了。
git status

看下返回的3行分别说了啥:
- 本地库在master分支,master是默认生成的。
- 目前还没有提交过任何东西。
- 除了没有提交过,而且现在还没有什么东西需要你提交。
这时候新增一个文件的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常用命令详解、版本切换原理的更多相关文章
- Git 入门和常用命令详解
git 使用使用教程 git 使用简易指南 常用 Git 命令清单 下载 https://git-scm.com/downloads 工作流 本地仓库由三部分组成. 工作区:保存实际的文件( ...
- Kubernetes,kubectl常用命令详解
kubectl概述 祭出一张图,转载至 kubernetes-handbook/kubectl命令概述 ,可以对命令族有个整体的概念. 环境准备 允许master节点部署pod,使用命令如下: kub ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
- hbase shell基础和常用命令详解(转)
HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...
- H3C常用命令详解
H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- DOS常用命令详解
DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...
- Linux常用命令详解上
Linux常用命令详解上 目录 一.shell 二.Linux命令 2.1.内部命令与外部命令的区别 2.2.Linux命令行的格式 2.3.编辑Linux命令行的辅助操作 2.4.获得命令帮助的方法 ...
- samtools常用命令详解(转)
转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...
- cisco常用命令详解
cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...
随机推荐
- springboot2.0全局异常处理,文件上传过大会导致,方法被执行两次,并且连接被重置
最后发现是内嵌tomcat也有文件大小限制,默认为2MB,我上传的是4MB,然后就炸了.在application.properties中添加server.tomcat.max-swallow-size ...
- P2731 骑马修栅栏 Riding the Fences 题解(欧拉回路)
题目链接 P2731 骑马修栅栏 Riding the Fences 解题思路 存图+简单\(DFS\). 坑点在于两种不同的输出方式. #include<stdio.h> #define ...
- 如何在 ASP.Net Web Forms 中使用依赖注入
依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...
- A New Stone Game POJ - 1740
题目链接:https://vjudge.net/problem/POJ-1740#author=0 题意:有n堆石子,每次你可以选一堆拿走任意数量的石子,而且你还可以选择从这一堆剩下石子中取任意数量石 ...
- gstreamer应用开发(播放器)之旅
GStreamer开发,主要分为两块:应用开发.插件开发. 插件开发人员,通常是编解码库的作者(做出了编解码库后,希望gstreamer能用起来这个库,因此增加这个适配层).芯片原厂人员(将自家的hw ...
- 《Selenium自动化测试实战:基于Python》之 Selenium IDE插件的安装与使用
第3章 Selenium IDE插件的安装与使用 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.com/292045 ...
- 极速精简 Go 版 Logstash
前言 今天来介绍 go-zero 生态的另一个组件 go-stash.这是一个 logstash 的 Go 语言替代版,我们用 go-stash 相比原先的 logstash 节省了2/3的服务器资源 ...
- 第14 章 : Kubernetes Service讲解
Kubernetes Service 本文将主要分享以下四方面的内容: 为什么需要 K8s service: K8s service 用例解读: K8s service 操作演示: K8s servi ...
- Img2Latex 临时方法
Img2Latex 临时方法 博客园Markdown编辑器中公式需采用Latex编写,然鹅现在并不想学习Latex 毕竟工科生,写论文也免不了的各种公式 (终极解决方案当然是学会Latex) 1.工具 ...
- OO结课了,狂喜
OO结课了,狂喜 哈哈哈哈哈 哈哈哈 哈哈 哈 第十三次作业 UML类图 简要分析: 本次作业是对UML类图进行解析,给到的接口里面已经有了很多类了,但是自带的类肯定是没有反应这些类的结构的.所以就自 ...