【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 #从用户模式切换到 ...
随机推荐
- 七种方案!探讨Redis分布式锁的正确使用姿势
前言 日常开发中,秒杀下单.抢红包等等业务场景,都需要用到分布式锁.而Redis非常适合作为分布式锁使用.本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式.如果有不正确的地方,欢迎大家 ...
- 零投资!零风险!手把手教你挖pi币
为什么说PI币属于区块链4.0代币呢?我们先从人类社会的生产力生产关系的递进来做一波有利的证明! 原始社会--封建王朝--君主立宪--资本主义--社会主义 原始社会:社会物质财富分配既有弱肉强食也有按 ...
- js输入框只能输入数字
1.只允许输入数字 <input type="text" onkeyup="this.value=this.value.replace(/\D/g,'')&quo ...
- linux 安装FastFdfs
一.安装依赖软件和类库(安装前的准备) 依次执行以下命令: yum install gcc-c++ -y yum -y install zlib zlib-devel pcre pcre-devel ...
- 基于autofac的属性注入
基于autofac的属性注入 什么是属性注入 在了解属性注入之前,要先了解一下DI(Dependency Injection),即依赖注入.在ASP.NET Core里自带了一个IOC容器,而且程序支 ...
- vue文本滚动组件
看了好多网上的文本组件,发现好多都有这样那样的问题:特别是滚动的时候失真的感觉,今天整合了文本滚动的方式用CSS的 animation写出一套组件:VUE项目直接用.感觉有用的朋友关注下 效果图, ...
- java例题_28 冒泡排序
1 /*28 [程序 28 排序算法] 2 题目:对 10 个数进行排序 3 程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一个元素交换, 下次类推, 4 即用第二个元素与后 ...
- 手机浏览器通过Scheme跳转APP,兼容各种手机浏览器
一个比较完整的产品线,必定有APP和网站,另外还有微信公众号网页和小程序.那么有一个比较常见的需求就是在手机浏览器内打开APP,实现起来也比较简单,只要APP配置的有URLScheme即可. 但是因为 ...
- 仅仅使用Google就完成了人生第一次破解
2021年2月6日21:17:09 begin 起因 在异乡的打工人,不善言谈,幸有一老同学,周末常邀吃饭,感恩之心铭记于心.她结婚时,为表心意欲做视频,视频需要制作字幕,搜索之,偶遇一字幕软件,但是 ...
- 人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式
人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式 在前面5期文章中,我们分别详细介绍了持续交付体系基础层面的建设,主要是多环境和配置管理,这些是持续交付自动化体系的基础,是跟我们实际的业务场景 ...