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),都只不 ...
随机推荐
- iOS 快速集成启动页广告
前言 由于项目中要用到启动页广告,所以做了简单的研究,同时借鉴网易新闻和蘑菇街的交互写了一个简单的demo,现在写出来供大家参考,可能由于个人局限会有一些bug和不完善的地方,也希望大家能够友善提醒和 ...
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
一.问题分析 对于后台系统,相比大家都有所印象,知道其中的布局结构,如图: 在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,即根 ...
- 规范 : Sql statusEnum
statusEnum 的诞生是为了在看Sql 表时,可以知道他是一个有特别的string的分类,在扩张或修改时,可以方便追踪到c#, e.g. 如果是“称呼”(column title),在sql没有 ...
- echarts动态添加数据(饼图为例)
$.ajax({type : "POST",async : false,url : '${ctx}/basic/bsAllPictureGuarantee/pictJson',da ...
- Jquery之JSON的用法
今天讲了Jquery里面JSON的用法,下面是今天讲课给的例子: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...
- 关于mvc中传入DataTable到视图的应用
MVC 中 如果是多表连接查询出的数据需要重新定义一个ViewModel,觉得很是麻烦,所以可以通过传一个DataTable到视图中可以避免这个问题 但是不知道会有什么不好的地方,有这方面经验的大神有 ...
- iOS性能之HTTP2.0
在移动互联网领域蓬勃发展的今天,APP的性能也成为各大公司重点关注的方向,该系列文章主要针对iOS的性能的几个方面做一些研究. 什么是HTTP2.0? 网上很容易搜到关于HTTP2.0的概念的文章,这 ...
- Team Foundation Server 基本功能
Team Foundation Server(以下简称TFS)作为Microsoft发布的一个主要用于团队源代码管理工具,以敏捷开发作为其最大的特点而占领部分市场.该文主要介绍 TFS 在 Visua ...
- JS实现购物车特效
学习通过JavaScript实现类似于淘宝的购物车效果,包括商品的单选.全选.删除.修改数量.价格计算.数目计算.预览等功能. 1. 实现兼容低版本IE的getElementsByClassName( ...
- Android -- 自定义StepView实现个人信息验证进度条
1,项目中要用到个人信息验证的在网上找了一下,好像有封装好了的StepView,首先感谢一下作者,这是作者的地址,效果图如下: 2,正准备撸起袖子就是一顿复制粘贴的时候,发现效果图成这个样子了(其实这 ...