前面的话

  本文将以一个简单实例的形式来介绍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版本切换的更多相关文章

  1. Git Day01,仓库,commit,版本切换

    1st,创建版本库:  2nd,添加文件:  3rd,修改文件,并提交: 4th,版本切换:git log查看版本:版本回退: 又回到原始版本了: 回到“未来”: 今天就到这里,明天继续.Git确实挺 ...

  2. Git for Windows之日志查看与版本切换

    1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...

  3. 版本管理·玩转git(日志查看与版本切换)

    如果你想更清晰地学习git,你必须要了解3个重要区域. 工作区:即开发者的工作目录 暂存区:修改已被记录,但尚未录入版本库的区域 版本库:存储变化日志及版本信息 当你在工作区进行开发工作时,git会记 ...

  4. Git学习——版本切换

    版本回退 回退到前面几个版本的命令如下: git reset --hard HEAD^ //回退到前一个版本 git reset --hard HEAD^^ //回退到前前一个版本 git reset ...

  5. redmine整合GIT版本库

    redmine整合GIT版本库   服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...

  6. 详解在Visual Studio中使用git版本系统[转]

    这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...

  7. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  8. 详解在visual studio中使用git版本系统(图文)

    很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...

  9. 在visual studio中使用git版本系统(zz)

    第一部分: 安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不 ...

随机推荐

  1. 【转】Netty系列之Netty并发编程分析

    http://www.infoq.com/cn/articles/netty-concurrent-programming-analysis

  2. 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样

    去年折腾的一个东西,之前 blog 里也写过,不过那时边琢磨边写,所以比较杂乱,现在简单完整地讲解一下. 前言 当时看到一本虚拟机相关的书,正好又在想 JS 混淆相关的事,无意中冒出个问题:能不能把某 ...

  3. async/await与promise(nodejs中的异步操作问题)

    此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...

  4. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

  5. Unity3d场景漫游---iTween实现

    接触U3D以来,我做过的场景漫游实现方式一般有以下几种: Unity3d中的Animation组件,通过设置摄像机的关键点实现场景漫游 第一人称或第三人称控制器 编写摄像机控制脚本 iTween iT ...

  6. Visual Studio 2017离线安装包,百度云分流

    Visual Studio正式版发布了,然而只能在线安装.虽然官方有提供了离线的方法,但还是蛮复杂的,所以我打包了两个版本发布至百度云分享. 离线分流 地址:http://pan.baidu.com/ ...

  7. Vue学习之路---No.4(分享心得,欢迎批评指正)

    这里说声抱歉,周末因为有其他事,没有更新博客,那么我们今天继续上周5的说. 老规矩,先回顾一下上一次的重点: 1.利用V-if和v-else来提到show()和hide(),同时要记住,v-else一 ...

  8. java 学习资源

    1.tomcat版本http://tomcat.apache.org/whichversion.html 2.Servlet 2.5规范https://jcp.org/aboutJava/commun ...

  9. web CSS的知识- 关于后代选择器,子选择器,兄弟选择器的使用

    1. 后代选择器官方解释:后代选择器可以选择作为某元素后代的元素.理解:选择某一标签的后代中,所有的此标签标记例:ul em {color:red;}就是选择,h1标签后代中中,所有的em.代码如下: ...

  10. (转)Uploadify 3.2 参数属性、事件、方法函数详解

    转自http://blog.sina.com.cn/s/blog_5079086b0101fkmh.html Hallelujah博客 一.属性 属性名称 默认值 说明 auto true 设置为tr ...