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),都只不 ...
随机推荐
- 一个web应用的诞生(7)--结构调整
现在所有的Py代码均写在default.py文件中,很明显这种方法下,一旦程序变的负责,那么无论对于开发和维护来说,都会带来很多问题. Flask框架并不强制要求项目使用特定的组织结构,所以这里使用的 ...
- 智能打印SDK-源码剖析
开源地址:http://www.dnnode.com/ 软件下载地址:http://www.dnnode.com/在线展示:http://www.dnnode.com/help.html 前面的文章, ...
- Asp.net mvc 知多少(九)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- mvc关于三级联动修改时数据回显
在网上找了好久,都没有找到自己想要的那种效果,最后还是自己写出来了, 虽然方法有点笨. 这是Controller里 public ActionResult Edit(string id) { //查询 ...
- css中的那些布局
因为最近心血来潮,就总结了一下css中的几种常见的多列布局. 两列自适应布局 两列自适应布局算是css布局里面最基础的一种布局了,不少网站在使用. 这种布局通常是左侧固定,右边自适应,当然也有反过来的 ...
- iOS集成友盟推送
之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务 在这之前我们需要做一些准备动作 #1. 注册一个App ID #2. Enable Push Notification ...
- 文件File
前面的话 不能直接访问用户计算机中的文件,一直都是Web应用开发中的一大障碍.2000年以前,处理文件的唯一方式就是在表单中加入<input type="file">字 ...
- casperjs环境安装
1.python 环境安装 2.PhantomJs安装,戳这里,安装的1.9.8版本的,配置环境变量path:";C:\phantomjs"(注意:安装2.0.0版本,运行casp ...
- shiro学习笔记_0100_shiro简介
前言:第一次知道shiro是2016年夏天,做项目时候我要写springmvc的拦截器,申哥看到后,说这个不安全,就给我捣鼓了shiro,我就看了下,从此认识了shiro.此笔记是根据网上的视频教程记 ...
- 《Machine Learning》系列学习笔记之第一周
<Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...