【三】版本之间穿梭切换
版本之间穿梭切换
- 1. 版本回退
- 2. 回退版本
- 3. 工作区和暂存区
- 4. 管理修改
- 5. 撤销修改
- 6. 删除文件
再穿梭前,我们先修改readme.txt
文件,修改为:
Git is a distributed version control system.
Git is free software.
运行git status
命令看看结果:
git status
命令可以让我们时刻掌握仓库的当前状态,例如上面的信息告诉我们readme.txt
文件被修改了,还没有add
所以不能commit
。
如果不知道或忘记了修改了什么,可以使用git diff
查看修改的具体内容(diff
就是difference
的缩写):
红色文字前面有个减号-的就是删除的,绿色的前面有个加号+的就是新增的,以上信息告诉我们第一行新增了一个单词distributed
。
知道了修改了什么就可以放心提交了,提交还是两步骤,第一步先git add
,然后使用git status
查看下状态:
这里信息告诉我们将要提交的修改包括readme.txt
文件,然后第二步就可以提交了:
提交完成后,再使用git status
查看仓库的当前状态:
上面信息说明没有需要提交的修改,而且工作目录是干净的。
1. 版本回退
先再来练习下,再修改一个版本,修改文件为:
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后提交:
现在已经有3个版本的提交记录,使用git log
查看:
git log
命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是add a readme file
。
如果嫌信息太多,可以加上--pretty=oneline
就可以:
上面显示的一大串的字符是commit id
(版本号),这是SHA1
计算出来的一个非常大的数字,用十六进制表示,每个人的不一样,以自己的为准。
为什么commit id
需要一大串字符表示呢?因为Git是分布式的版本控制系统,避免大家版本号冲突。
2. 回退版本
首先,Git
必须知道当前版本是哪个版本,在Git
中,用HEAD
表示当前版本,也就是最新的提交cc1510...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本append GPL
回退到上一个版本add distributed
,就可以使用git reset
命令:
这里的
HEAD^
加引号是因为windows系统会把^
当作换行符,不加引号会显示“more?”,如果你看到了不要奇怪哦。
先来看看文件还原了没有:
果然还原了。
再用git log
看看现在版本库的状态:
额。。。最新的append GPL
版本不见了!那怎么回到最新的版本呢?如果你没有清命令行记录还是可以找到commit id
的,如果清了咋办呢?
还是有办法的,Git
提供了一个命令git reflog
用来记录你的每一次命令:
终于看到了append GPL
的commit id
是cc1510e
,所以可以回去了:
commit id
可以不用写全,前几位就可以了,只要能唯一代表就可以。
Git
的版本回退速度非常快,因为Git
在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git
仅仅是把HEAD
从指向append GPL
:
改为指向add distributed
:
然后顺便把工作区的文件更新了。所以你让HEAD
指向哪个版本号,你就把当前版本定位在哪。
3. 工作区和暂存区
Git
和其他版本控制系统如SVN
的一个不同之处就是有暂存区
的概念。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit
文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git
的版本库
。
Git
的版本库里存了很多东西,其中最重要的就是称为stage
(或者叫index
)的暂存区
,还有Git
为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区
;
第二步是用git commit
提交更改,实际上就是把暂存区
的所有内容
提交到当前分支
。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
例如:我们再修改下readme.txt
,然后再加一个LICENSE
文件
使用git status
查看下状态:
可以看到readme.txt
是Changes not staged for commit
(没有添加到暂存区,不能提交),而LICENSE是Untracked files
(新文件没有被跟踪),使用git add
后再看下状态:
现在,暂存区的状态就变成这样了:
所以,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage)
,然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
现在版本库变成了这样,暂存区就没有任何内容了:
4. 管理修改
为什么Git
比其他版本控制系统设计得优秀,因为Git
跟踪并管理的是修改
,而非文件
。
修改:新增一行,修改字符,删除一行/字符,创建文件。。。
例如:
- 对
readme.txt
加一行 git add
添加暂存- 再修改
readme.txt
刚才加的一行 git commit
提交到分支git status
查看状态
额。。。第二次修改没有被提交?为什么呢?
回顾操作:第一次修改 -> git add
-> 第二次修改 -> git commit
因为第二次修改没有加到缓存区
,而git commit
只提交缓存区的修改到当前分支
,所以只提交了第一次的修改。
使用git diff
查看下:
可见第二次确实没有修改,我们可以继续git add
再git commit
,也可以和后面修改的文件一起add
再一起commit
。
5. 撤销修改
如果不小心修改错了文件,怎么撤回呢?这里有两种情况:
- 修改后还没有
add
到暂存区 - 已经
add
到暂存区了,又做了修改
先来看情况1(未add
到暂存区):
git
提示我们git restore
可以丢弃工作区的修改,执行后工作区的文件被还原了。
情况2(已add
到暂存区):
可以先用git restore --staged
将文件从暂存区退回到工作区:
然后再使用git restore
丢弃工作区的修改:
然后再看下状态,是clean
状态的:
如果已经提交到分支
了,那就直接回退版本
就行了。
6. 删除文件
先添加一个文件test.txt
,并提交:
此时删除文件:
然后这里有两个选择,一是误删了需要恢复,二是真的需要删除:
恢复删除的文件
此时文件又回来了,工作区和版本库相同了。确认删除
使用git rm
删除文件提交到暂存区,然后再git commit
提交到当前分支
:
现在文件就从版本库删除了。
【三】版本之间穿梭切换相关推荐
- 安装多版本JDK以及多版本之间的切换
1.先安装一个jdk,做好相应的环境变量的配置. 2.安装第二个jdk,在配置环境变量的时候,我们只需要配置java_home. 配置成下面的效果: 我们要用到哪个版本的jdk.就修改这里: 添加运行 ...
- 〖Linux〗多个JDK版本之间快速切换
由于工作的需要,经常要切换JDK版本比如我HOME目录下有三个JDK版本: ~/apt/jdk1.6.0_34 # JDK6 ~/apt/jdk1.7.0_67 # JDK7 ~/apt/jdk1.8 ...
- ubuntu中 不同JDK版本之间的切换
Ubuntu中JDK 的切换前提是同时安装了多个版本,如jdk7和jdk8,若要切换,在终端输入: sudo update-alternatives --config javasudo update- ...
- windows下JDK版本之间的切换
安装JDK的时候个人比较推荐使用压缩包的方式安装. 如果你的电脑存在多个JDK版本的时候,如果使用的是压缩包解压的方式安装的话,你可能仅仅需要更改一下JAVA_HOME环境变量 你敲java -ver ...
- python3版本切换_让你在python2和3二个版本之间自由切换自由翱翔
背景: 我们都知道,即有python2又有python3的时候,我们往往无法快乐的翱翔的尽情的使用python,嘿嘿,反正谁用谁知道呢,哈哈,来来,上个流程,保证你有能力在python2和3之间欢乐的 ...
- 【重难点】【计算机网络 02】TCP 和 UDP 的区别、TCP 的三次握手和四次挥手、HTTP 和 HTTPS、HTTP 各版本之间的区别、HTTP 如何实现长连接
[重难点][计算机网络 02]TCP 和 UDP 的区别.TCP 的三次握手和四次挥手.HTTP 和 HTTPS.HTTP 各版本之间的区别.HTTP 如何实现长连接 文章目录 [重难点][计算机网络 ...
- git的使用学习(三)时光机穿梭
1.版本回退 现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control ...
- 几种主要的Linux版本之间的比较
我们很难从大量Linux版本中选择一款正好适合某个特定环境的版本.每一个版本都有自己的侧重点,有一套自己的文件,安装方式和自己的Linux内核版本.本文我将比较四种主要的Linux版本--Debian ...
- windows下同一个显卡配置多个CUDA工具包以及它们之间的切换
1.多版本的CUDA以及cudnn安装 2.不同版本的tensorflow在CUDA之间的切换 3.验证自己的CUDA是否安装成功 前面的一片文章里面讲到了tensorflow.NVIDIA显卡驱动. ...
最新文章
- Machine Learning week 3 quiz: programming assignment-Logistic Regression
- Base64加密解密算法的C/C++代码实现
- 【杂谈】AI工业界都有哪些值得参加的比赛?
- python爬取主播信息
- dynamic web module 2.5与2.4
- SpringBoot中注入ApplicationContext对象的三种方式
- 这不仅仅是html5的HTML5问题
- 描述符演练-02-逻辑疏理-类的装饰器
- Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc-gt;wait...
- 使用WebDriver 登录163邮箱
- 算法岗面经总结(新华智云-北京)
- 解决ERROR Failed to compile with 3 errors These dependencies were not found: * pdfjs-dist/es5/buil问题
- docker 分析cpu占用过高
- 豆瓣8.0分,尺度堪比色戒,一部让人绝望的电影
- 英语中的分数 带分数 小数怎么读
- 为什么蘑菇丁会显示服务器繁忙,浅谈蘑菇丁自动打卡
- 2022-2028年全球与中国运动钓鱼用具行业市场需求预测分析
- 应用权限不足0xc0000022
- 刷网站关键字_学霸都在偷偷使用的 6 个高质量自学网站
- 图解HTTP-阅读笔记