Git版本切换
前面的话
本文将以一个简单实例的形式来介绍Git版本切换
初始版本
首先,在一个自定义的位置,创建目录a,比如在D盘下
[注意]本文会用到一些常用的Linux的Shell命令,详细信息移步至此
先使用cd d:命令,切换到d盘,然后使用mkdir a命令,在d盘下新建一个名称为a的文件夹。最后,使用ls命令,查看d盘下的所有文件及文件夹,发现a是存在的,所以操作成功

然后,使用cd a命令,进入d盘下的a文件夹

接下来,使用git init命令,初始化一个Git仓库。创建仓库的本质就是在当前文件夹下创建一个.git文件夹


然后使用git status命令,查看当前的文件状态

接下来,在a文件夹下,使用touch 1.txt命令,新建一个1.txt文本文件,再使用git status命令,查看当前的文件状态。在状态报告中可以看到新建的1.txt文件出现在“Untracked files”下面,表示该文件为未跟踪的文件

接着,使用git add 1.txt命令,跟踪该文件。此时再运行git status命令,会看到1.txt文件已被跟踪,并处于暂存状态。只要在“Changes to be committed”这行下面的,就说明是已暂存状态

再运行提交命令git commit -m 'add 1.txt',提交文件1.txt。提交后它会提示,当前是在哪个分支(master)提交的,本次提交的完整SHA-1校验和是什么(beac21a),以及在本次提交中,有1个文件修订过,0行添改,0行删改过
再运行命令git status时,因为文件已经被提交了,所以提示没有什么可供提交的了,工作目录很干净

新版本
接下来,我们使用cat > 1.txt命令,将1.txt文件的内容从无内容修改为'1'。使用git status时,提示当前文件没有放置在暂存区

使用git add 1.txt命令,放置在暂存区,再使用git status时,提示1.txt文件已被跟踪,并处于暂存状态

使用git commit -m 'alter to 1'命令,来提交文件1.txt。提交后它会提示,本次提交的完整SHA-1校验和是f73e651,以及在本次提交中,有1个文件修订过,1行添改过

接下来,照猫画虎,创建1.txt的第三个版本,将其内容修改为'2'并提交。本次提交的完整SHA-1校验和是74833f8,以及在本次提交中,有1个文件修订过,1行添改过、1行删改过

查看版本
现在,我们总共把三个版本的1.txt文件提交到Git仓库中了
版本1:空内容
版本2:''
版本3:''
当然了,在实际工作中,我们处理的文件比较复杂,并不能记得每次都改了什么内容。在Git中,我们用git log命令查看提交历史
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是alter t0 2,上一次是alter to 1,最早的一次是add 1.txt

如果嫌输出信息太多,可以加上--pretty=oneline参数

git log有许多选项,下表列出了一些常用的选项及其释义
选项 说明
-p 按补丁格式显示每个更新之间的差异
--word-diff 按 word diff 格式显示差异
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅在提交信息后显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA- 的前几个字符,而非所有的 个字符
--relative-date 使用较短的相对时间显示(比如,“ weeks ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息可用的选项包括oneline,short,full,fuller 和format(后跟指定格式)
--oneline `--pretty=oneline --abbrev-commit` 的简化用法
我们常用-p选项展开显示每次提交的内容差异。可以看到,最近一次更新和上一次更新的区别是将1修改为2。上一次和上上一次更新的区别是从空内容变成内容为1

有时候图形化工具更容易展示历史提交的变化,随Git一同发布的gitk就是这样一种工具。它是用Tcl/Tk写成的,基本上相当于git log命令的可视化版本,凡是git log可以用的选项也都能用在gitk上。在项目工作目录中输入gitk命令后,就会启动下图所示的界面

版本切换
现在,我们准备把1.txt回退到上一个版本,也就是内容为'1'的那个版本
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交(74833f8172d219dbf755dff7cdc64356bff39aad),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
现在,我们要把当前版本“alter to 2”回退到上一个版本“alter to 1”,就可以使用git reset命令
首先,使用cat 1.txt命令查看该文件的内容为'2',接着使用命令git reset --hard HEAD^,将文件返回到上一个版本,再使用cat 1.txt命令查看该文件的内容为'1'

我们用git log再看看现在版本库的状态,发现最新的那个版本“alter to 2”已经看不到了

如果想返回到最新的版本,可以使用命令git reset --hard commit_id来实现
但是,如果找到最新版本的1.txt的commit id呢?Git提供了一个命令git reflog,该命令按照之前经过的所有的commit路径按序来排列,用来记录你的每一次命令

从git reflog命令返回的结果中发现,第五行的beac21a是上上个版本的1.txt文件的是commit id,第四行的f73e651是上个版本的,第三行的74833f8就是最新版本的
下面使用git reset命令,将文件恢复到最新版本

总结
Git允许我们使用命令git reset --hard commit_id在版本的历史之间切换
HEAD可以用来替换commit_id,HEAD指向的版本是当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100
当然了,^和~这两个特殊符号,除了用在HEAD上外,还可以用在<branchName>上或Commit ID上。如master^,代表master的上一个版本;1f2f476~1代表Commit ID为1f2f476的上一个版本
可以用git log可以查看提交历史,或者用git reflog查看命令历史,以便确定要切换的版本的版本号
Git版本切换的更多相关文章
- Git Day01,仓库,commit,版本切换
1st,创建版本库: 2nd,添加文件: 3rd,修改文件,并提交: 4th,版本切换:git log查看版本:版本回退: 又回到原始版本了: 回到“未来”: 今天就到这里,明天继续.Git确实挺 ...
- Git for Windows之日志查看与版本切换
1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...
- 版本管理·玩转git(日志查看与版本切换)
如果你想更清晰地学习git,你必须要了解3个重要区域. 工作区:即开发者的工作目录 暂存区:修改已被记录,但尚未录入版本库的区域 版本库:存储变化日志及版本信息 当你在工作区进行开发工作时,git会记 ...
- Git学习——版本切换
版本回退 回退到前面几个版本的命令如下: git reset --hard HEAD^ //回退到前一个版本 git reset --hard HEAD^^ //回退到前前一个版本 git reset ...
- redmine整合GIT版本库
redmine整合GIT版本库 服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...
- 详解在Visual Studio中使用git版本系统[转]
这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
- 详解在visual studio中使用git版本系统(图文)
很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...
- 在visual studio中使用git版本系统(zz)
第一部分: 安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不 ...
随机推荐
- Unity3d的序列帧动画
马上这星期就要过去了,为了完成每星期写一篇博客的目标,熬夜也要写完. 最近项目中用到了很多序列帧动画,之前看教程也接触过序列帧动画,但当时没用到,就没仔细研究,这次就借着这个机会好好总结一下序列帧动画 ...
- 3D Touch开发全面教程之Peek and Pop - 预览和弹出
## 3D Touch开发全面教程之Peek and Pop - 预览和弹出 --- ### 了解3D Touch 在iPhone 6s和iPhone 6s Plus中Apple引入了3D Touch ...
- 每天一个Linux命令(01)--ls命令
ls命令是Linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单.通过ls命令不仅可以查看Linux文件 ...
- Android HelloChart Demo
这几天,要做一个图标的统计,自己去网上查了下,现在用的比较多的有三种,AChartEngine 是Google的一个开源图表库 这种我最开始就去导demo去了解他,不过里面是是英文,不好研究.我就放弃 ...
- 红黑树 C++实现
#ifndef __RED_BLACK_TREE_H__ #define __RED_BLACK_TREE_H__ namespace lxf { template <typename Key, ...
- iOS网络编程笔记——XML文档解析
今天利用多余时间研究了一下XML文档解析,虽然现在移动端使用的数据格式基本为JSON格式,但是XML格式毕竟多年来一直在各种计算机语言之间使用,是一种老牌的经典的灵活的数据交换格式.所以我认为还是很有 ...
- 一个web应用的诞生(8)--博文发布
这个系统一直号称轻博客,但貌似博客的功能还没有实现,这一章将简单的实现一个博客功能,首先,当然是为数据库创建一个博文表(models\post.py): from .. import db from ...
- JD . 简单的网站构成、引入图标、去除 图片间距/加粗/倾斜/下划线/蓝色外边框 禁止文本拖拽、文字居中、做logo、模拟鼠标 、不使用hover外部css样式实现hover鼠标悬停改变样式
模拟京东案例准备: 截图(效果图PSD文件) 搭建项目环境 (结构样式行为分离) HTML 核心文件 index.html CSS 控制样式 base.css(基础样式 ...
- CDMA sid, nid, bid 含义解释
copyright@ celldb.cc SID 是系统识别码,每个地级市只有一个sid,是唯一的. NID是网络识别码,由各本地网管理,也就是由地级分公司分配.每个地级市可能有1到3个nid. BI ...
- nodejs 使用mongoose 操作mongodb
nodejs操作mongodb可以使用mongoose: Mongoose is a MongoDB object modeling tool designed to work in an async ...